エンティティフレームワークを使用して、新しく作成されたエンティティのコレクションに既存のエンティティを追加する

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に指示します。だからあなたはたった一つの選択肢しか残されていない。連絡先を読み込む必要があります。

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

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ