我正在使用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合并选项加载的对象始终是分离的。”
我知道我可能错过了一步或者没有完全理解实体框架如何处理多对多关系。
不允许“附加”,因为您尚未保存订单。调用“添加”会告知实体框架您要插入新联系人。所以你只剩下一个选择。您需要加载联系人。
这是最快的方法:
OrderDetails context = new OrderDetails();
Contact contact = context.GetObjectByKey(new EntityKey("OrderDetails.Contact", "contact_id", existingContactId));
order.Contact.Add(contact);