8

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

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

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

4

2 回答 2

5

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

这是最快的方法:

OrderDetails context = new OrderDetails();
Contact contact = context.GetObjectByKey(new EntityKey("OrderDetails.Contact", "contact_id", existingContactId));
order.Contact.Add(contact);
于 2009-12-16T05:16:33.520 回答
3

如果 Order 有一个属性 Contact,那么你可以这样做:

order.Contact.Add(contact);

不过,我建议将属性称为 Contact s而不是 Contact。

于 2009-01-05T15:48:35.440 回答