新しいオーダーを作成するために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に指示します。だからあなたはたった一つの選択肢しか残されていない。連絡先を読み込む必要があります。
これを行う最も速い方法は次のとおりです。
OrderDetails context = new OrderDetails();
Contact contact = context.GetObjectByKey(new EntityKey("OrderDetails.Contact", "contact_id", existingContactId));
order.Contact.Add(contact);