代码优先实体与数据库无关

时间:2012-08-01 11:56:09

标签: c# ef-code-first entity-framework-4.3

我是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到Something的关系根本没有映射,在数据库表中有null,我几乎尝试了所有东西,现在我不知道... 为什么Layer不能引用某些东西?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

    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; }
        }