1

我是 Code First 的新手,并尝试构建我的数据模型。一切都很好,除了一个问题,我尝试映射接下来的事情:

public class Something
{
       ...
       public virtual Layer Layer1 { get; set; }
       public virtual Layer Layer2 { get; set; }
       public virtual Layer Layer3 { get; set; }
       ...
}

public class Layer
{
       ...
       public virtual Something Something { get; set; }
       ...
}

Something 类映射正常,但是从 Layer 到S​​omething 的关系根本不映射,在数据库表中有null,我几乎尝试了所有东西,现在我不知道......为什么Layer 不能引用到某事?

提前致谢。

4

1 回答 1

0
  1. 你有三个FK,所以你需要Something类中的三个Layer类型的属性,以及Layer类中Something类型的三个属性。您不能以某种方式将 Layer 类中所有相关的Something 收集到一个属性中。
  2. 由于两个表之间有多个 FK,因此您需要指定 id,并使用数据注释将 id 与导航属性连接起来。
  3. 我假设'正常' FK's,所以这意味着层记录可以被多个Something's引用。如果是这种情况,那么 Layer 类中的 Something-properties 将需要是集合。

总之,这会导致:

public class Something {
        public int SomethingId { get; set; }
        [ForeignKey("Layer1")]
        public int Layer1Id { get; set; }
        [ForeignKey("Layer2")]
        public int Layer2Id { get; set; }
        [ForeignKey("Layer3")]
        public int Layer3Id { get; set; }
        [ForeignKey("Layer1Id")]
        public Layer Layer1 { get; set; }
        [ForeignKey("Layer2Id")]
        public Layer Layer2 { get; set; }
        [ForeignKey("Layer3Id")]
        public Layer Layer3 { get; set; }
    }

    public class Layer {
        public int LayerId { get; set; }
        [InverseProperty("Layer1")]
        public Something Something1 { get; set; }
        [InverseProperty("Layer2")]
        public Something Something2 { get; set; }
        [InverseProperty("Layer3")]
        public Something Something3 { get; set; }
    }
于 2012-08-01T12:31:03.463 回答