当前位置:  开发笔记 > 大数据 > 正文

使用实体框架将现有实体添加到新创建的实体上的集合中

如何解决《使用实体框架将现有实体添加到新创建的实体上的集合中》经验,为你挑选了1个好方法。

我正在使用Entity框架来创建新订单.该订单包含一系列联系人,多对多关系.我想在创建订单时添加对订单上现有联系人的引用.订购和联系实体对象.

 Order order = new Order();

 //set details on order

 Contact contact = new Contact();

 EntityKey contactKey =
                    new EntityKey("OrderDetails.Contact",
                        "contact_id", contact.Key.Id);

 contact.EntityKey = contactKey;
 contact.contact_id = contact.Key.Id;

 order.Contact.Attach(contact);  // throws an exception!

 OrderDetails ordTable = new OrderDetails();
            ordTable.AddToOrder(order);
            int result = orgTable.SaveChanges();

当我去附加时,抛出此异常:

"当与此相关端相关联的源对象处于添加,删除或分离状态时,附加不是有效操作.使用NoTracking合并选项加载的对象始终是分离的."

我知道我可能错过了一步或者没有完全理解实体框架如何处理多对多关系.



1> Michael L Pe..:

不允许"附加",因为您尚未保存订单.调用"添加"会告知实体框架您要插入新联系人.所以你只剩下一个选择.您需要加载联系人.

这是最快的方法:

OrderDetails context = new OrderDetails();
Contact contact = context.GetObjectByKey(new EntityKey("OrderDetails.Contact", "contact_id", existingContactId));
order.Contact.Add(contact);


或者您可以创建一个存根实体(使用您知道的密钥)将其附加到Context(而不是集合),然后将该子添加到集合中.有关更多信息,请参见技巧26:http://blogs.msdn.com/alexj/archive/2009/06/19/tip-26-how-to-avoid-database-queries-using-stub-entities.aspx
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有