使用代码优先迁移表示属性在属性对象集合中的属性的类

时间:2014-04-28 17:27:43

标签: entity-framework c#-4.0 ef-code-first entity-framework-5

我正在尝试执行包含两个类/表的代码优先实体框架项目。 一个类代表一个小部件。第二个类/表包含此小部件的属性。即右螺纹,左螺纹,小,大等。

每个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中相同属性的多个副本。

最终我试图将属性表用作各种各样的可扩展枚举。

2 个答案:

答案 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