8

エンティティ フレームワークを使用して新しい注文を作成しています。注文には、多対多の関係である連絡先のコレクションが含まれています。注文の作成時に、注文に既存の連絡先への参照を追加したいと考えています。Order と Contact a 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 マージ オプションを使用してロードされたオブジェクトは常に切り離されます。」

おそらく、エンティティ フレームワークが多対多の関係を処理する方法を完全に理解していないか、ステップを見逃している可能性があります。

4

2 に答える 2

5

注文をまだ保存していないため、「添付」できません。"Add" を呼び出すと、新しい連絡先を挿入する必要があることが Entity Framework に通知されます。したがって、選択肢は 1 つしかありません。連絡先をロードする必要があります。

これを行う最も速い方法は次のとおりです。

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 ではなくContactというプロパティを作成することをお勧めします。

于 2009-01-05T15:48:35.440 に答える