EF多对多

时间:2013-04-24 12:17:10

标签: sql-server entity-framework

如何为EF构建这些表?

第一张表:

public class model1
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

第二张表:

public class model2
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

具有第一个和第二个连接的表 以及几个领域:

public class model3
{
    public int (id from model1){ get; set; }
    public int (id from model2) { get; set; }
    public int (id from model2){ get; set; }
    public decimal Name{ get; set; }
    public decimal Description{ get; set; }
}

1 个答案:

答案 0 :(得分:0)

我认为这可以解决问题(提供你描述的表结构)

public class model3
{
    public virtual model1 Model1 { get; set; }
    public virtual model2 Model2 { get; set; }
    public virtual model2 SecondModel2 { get; set; }

    // if you want the ID fields explicitly,
    // EF will map the keys by property name, 
    // optionaly you can use the ForeignKeyAttribute
    public int Model1Id { get; set; }
    public int Model2Id { get; set; }
    public int SecondModel2Id { get; set; }


    public decimal Name{ get; set; }
    public decimal Description{ get; set; }
}

但您可能想重新考虑结构 - 您提出的结构看起来有点可疑 - model1和model2具有相同的字段,因此可能不应将它们定义为单独的类。 model3类也有一些共同的字段,所以也许值得将它们提取到一个公共类中--EF处理继承。

要获得多对多的关系,你需要这样的东西:

public class Foo
{
    public int Id {get;set;}
    public virtual ICollection<Bar> Bars {get;set;}
}

public class Bar
{
    public int Id {get;set;}
    public virtual ICollection<Foo> Foos {get;set;}
}

这将创建一个Foo表,一个条形表和一个FooBars(或BarFoos)关联表。