实体框架配置addor更新多对多种子记录

时间:2018-07-22 16:42:36

标签: entity-framework many-to-many seed

定义多对多关系不是问题。 我有一个“房间”表(就像一间屋子里的房间),每个表都可以具有“颜色”表中的一种或多种颜色。 每个都有对相反表的List引用-请参见下面的类。

在Configuration类的Seed方法中,我正在使用AddOrUpdate创建各种表。

            ctx.Rooms.AddOrUpdate(r => new { r.Name, r.HouseId },
            new Room
            {
                Name = "Kitchen",
                House = (from h in ctx.Houses where h.Address == "Littleton, MA" select h).First(),
                HouseId = (from h in ctx.Houses where h.Address == "Littleton, MA" select h.HouseId).First()
            });

(随后是ctx.SaveChanges)

我可以用相同的方式创建许多颜色:

            ctx.Colors.AddOrUpdate(c => new { c.ColorName },
            new Color
            {
                ColorName = "Green"
            });

我要为每个房间关联一种或多种颜色。

enter image description here (在SQL中:) enter image description here 颜色: enter image description here enter image description here

EF创建了以多对多关系将两者联系起来的表。

enter image description here

这似乎应该很容易,但是我找不到办法,我也在网上搜索了。 谢谢你的帮助。 :-)

1 个答案:

答案 0 :(得分:1)

确保要在“房间”构造函数中初始化列表

public class Room
{
   public Room()
   {
      Colors = new List<Color>();
   }
   // properties omitted
   public virtual IList<Color> Colors {get;set;}
}

然后打电话

room.Colors.Add(Color color);

这将为您的列表添加颜色。

这不是最佳解决方案,因为您应该封装集合,以使您不会绕过任何业务规则,但是EF 6使其成为difficult

EF核心easier多了。