日期:2014-05-17  浏览次数:21090 次

EntityFramework多对多初始化

public class Order
{
  public virtual Guid OrderID {get;set;}
  public virtual ICollection<Menu> Menus {get;set;}
}

public class Menu
{
  public virtual Guid MenuID {get;set;}
  public virtual ICollection<Order> Orders {get;set;}
  public virtual int Price {get;set;}
}

比如是这样的两个实体

Order order = new Order();
order.OrderID = Guid.NewGuid();
//How to create?
//order.Menus = new List<Menu>();
order.Menus.Add(menu1);
order.Menus.Add(menu2);
order.Menus.Add(menu3);
order.Menus.Add(menu4);
dataContext.Orders.Add(order);
dataContext.SaveChanges();

创建一个订单,放入N个菜单,再保存进数据库
但是这样那些menu1~4存不进数据库
要new一个dataContext重新从数据库里读这个Order才能添加Menu,何解?

------解决方案--------------------
当然不会更新了,没有源,如何执行更新
------解决方案--------------------
有生成中间表没有。menu1-4有实例化吧。
------解决方案--------------------
引用:
引用:有生成中间表没有。menu1-4有实例化吧。
这个中间表什么意思?不是EF自动生成的么?
我这里是Code First
menu1~4是从EF里读出来的。

两个表的多对多是要通过一个中间表来存储的,你看看数据库里的,会多一张类似OrderMenu的表吧。

既然menu1~4已经在数据库里了,怎么可能再存一遍呢?EF会在中间表中将menu1~4的ID与其关联的OrderID存入。