entity-framework - 使用 Entity Framework 将现有实体添加到新创建实体的集合中

标签 entity-framework many-to-many

我正在使用 Entity Framework 创建新订单。订单包含联系人的集合,多对多的关系。我想在创建订单时添加对订单上现有联系人的引用。订购和联系实体对象。

 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 合并选项加载的对象始终是分离的。”

我知道我可能错过了一个步骤或者没有完全理解 Entity Framework 如何处理多对多关系。

最佳答案

不允许“附加”,因为您尚未保存订单。调用“添加”会告诉 Entity Framework 您要插入新联系人。所以你只剩下一个选择。您需要加载联系人。

以下是最快的方法:

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

关于entity-framework - 使用 Entity Framework 将现有实体添加到新创建实体的集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/407712/

相关文章:

django - django admin 中的通用多对多关系

mysql - 如何在MySql,Cakephp 3.6中查找多对多关系中的计数

ruby-on-rails - 多对多: has_many :通过关联表单将数据分配给链接模型创建表单 View

.net - DataTable 和 DataSet 现在应该过时了吗?

c# - FirstOrDefault() 在迭代中添加天数的时间

c# - 具有多个数据库和泛型的 Entity Framework Multi-Tenancy 架构

django - 如何在django创建 View 中保存多对多字段

c# - Entity Framework 不显示数据库的最后更改

c# - 在 Entity Framework 中包含派生类型的嵌套对象的最佳方式是什么?

ruby-on-rails - 在 Activeadmin 中编辑多对多关系