EntityFramework多对多初始化

Kation 2013-03-06 10:51:49

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,何解?
...全文
189 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kation 2013-03-07
  • 打赏
  • 举报
回复
引用 1 楼 FoxDave 的回复:
当然不会更新了,没有源,如何执行更新
menu1~4是已存在数据库里的
Kation 2013-03-07
  • 打赏
  • 举报
回复
引用 1 楼 FoxDave 的回复:
当然不会更新了,没有源,如何执行更新
如何才能?
Justin-Liu 2013-03-07
  • 打赏
  • 举报
回复
当然不会更新了,没有源,如何执行更新
Kation 2013-03-07
  • 打赏
  • 举报
回复
引用 7 楼 highplayer 的回复:
引用 5 楼 ZIP_xG 的回复:引用 4 楼 highplayer 的回复:有生成中间表没有。menu1-4有实例化吧。 这个中间表什么意思?不是EF自动生成的么? 我这里是Code First menu1~4是从EF里读出来的。 两个表的多对多是要通过一个中间表来存储的,你看看数据库里的,会多一张类似OrderMenu的表吧。 既然menu1~4已经在……
多对多就是这样用的吧 我发现解决方法了。 实体要用对应的DbSet<>的Create()方法来创建,这样里面的ICollection就会有EF来生成。 吸取教训,以后实体都要用EF来创建。。。
highplayer 2013-03-07
  • 打赏
  • 举报
回复
引用 5 楼 ZIP_xG 的回复:
引用 4 楼 highplayer 的回复:有生成中间表没有。menu1-4有实例化吧。 这个中间表什么意思?不是EF自动生成的么? 我这里是Code First menu1~4是从EF里读出来的。
两个表的多对多是要通过一个中间表来存储的,你看看数据库里的,会多一张类似OrderMenu的表吧。 既然menu1~4已经在数据库里了,怎么可能再存一遍呢?EF会在中间表中将menu1~4的ID与其关联的OrderID存入。
Kation 2013-03-07
  • 打赏
  • 举报
回复
引用 4 楼 highplayer 的回复:
有生成中间表没有。menu1-4有实例化吧。
用order.Menus = new List<Menu>();无法给EF中间表存入menu1~4。
Kation 2013-03-07
  • 打赏
  • 举报
回复
引用 4 楼 highplayer 的回复:
有生成中间表没有。menu1-4有实例化吧。
这个中间表什么意思?不是EF自动生成的么? 我这里是Code First menu1~4是从EF里读出来的。
highplayer 2013-03-07
  • 打赏
  • 举报
回复
有生成中间表没有。menu1-4有实例化吧。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧