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,何解?
8 个解决方案
#1
当然不会更新了,没有源,如何执行更新
#2
如何才能?
#3
menu1~4是已存在数据库里的
#4
有生成中间表没有。menu1-4有实例化吧。
#5
这个中间表什么意思?不是EF自动生成的么?
我这里是Code First
menu1~4是从EF里读出来的。
#6
用order.Menus = new List<Menu>();无法给EF中间表存入menu1~4。
#7
两个表的多对多是要通过一个中间表来存储的,你看看数据库里的,会多一张类似OrderMenu的表吧。
既然menu1~4已经在数据库里了,怎么可能再存一遍呢?EF会在中间表中将menu1~4的ID与其关联的OrderID存入。
#8
多对多就是这样用的吧
我发现解决方法了。
实体要用对应的DbSet<>的Create()方法来创建,这样里面的ICollection就会有EF来生成。
吸取教训,以后实体都要用EF来创建。。。
#1
当然不会更新了,没有源,如何执行更新
#2
如何才能?
#3
menu1~4是已存在数据库里的
#4
有生成中间表没有。menu1-4有实例化吧。
#5
这个中间表什么意思?不是EF自动生成的么?
我这里是Code First
menu1~4是从EF里读出来的。
#6
用order.Menus = new List<Menu>();无法给EF中间表存入menu1~4。
#7
两个表的多对多是要通过一个中间表来存储的,你看看数据库里的,会多一张类似OrderMenu的表吧。
既然menu1~4已经在数据库里了,怎么可能再存一遍呢?EF会在中间表中将menu1~4的ID与其关联的OrderID存入。
#8
多对多就是这样用的吧
我发现解决方法了。
实体要用对应的DbSet<>的Create()方法来创建,这样里面的ICollection就会有EF来生成。
吸取教训,以后实体都要用EF来创建。。。