我正在尝试执行包含两个类/表的代码优先实体框架项目。 一个类代表一个小部件。第二个类/表包含此小部件的属性。即右螺纹,左螺纹,小,大等。
每个Widget可以有一个或多个属性,每个属性可以属于许多小部件。
我在如何首先在代码中表示这一点时,我正在画一个空白。
class Widget{
public int Id {get;set;}
public string Name {get;set;}
public ICollection<Attribute> Attributes{get; set;}
}
class Attribute{
public int Id{ get; set;}
public string Name{get; set;}
}
上面的类为我提供了两个表和DB中相同属性的多个副本。
最终我试图将属性表用作各种各样的可扩展枚举。
答案 0 :(得分:2)
由于您在Attribute实体上没有导航属性,因此实体框架不会按惯例确定存在多对多关系。它将创建一对多。要指定多对多关系,您需要将映射代码添加到上下文中。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Widget>()
.HasMany(w => w.Attributes)
.WithMany();
}
只有在希望指定列名或表名时,才需要链接示例中的.Map()代码。如果省略该代码,Entity Framework将提供名称。
答案 1 :(得分:0)
我最终找到了一篇相关文章解释得很好。我担心文章的年代以及自2011年以来是否有任何变化。 Many to Many article