1

2 つのエンティティ a と b があり、それらの間の m2m 関連付けがあります。エンティティ a と b は私の DbContext に読み込まれますが、m2m associaiton は読み込まれません。さて、私のプログラムでは、a と b の主キーがわかっているので、m2m 関連付けを削除する必要があります。

もちろん、データベースから a を再ロードして、その m2m 関連付けを含めることもできます。ただし、これには、データベースからエンティティを取得するために、データベースへの追加のラウンド トリップが必要です。

最初に DbContext から a をデタッチし、次に b をその BSet に追加し、次に a を再度アタッチしてから remove を次のように呼び出すこともできます。

context.Entry(a).State = EntityState.Detached;
a.Bset.Add(b)
context.Set(typeof(A)).Attach(a);
a.BSet.Remove(b)

ただし、a をそのコンテキストから切り離してからアタッチすると、a に加えられた変更が失われます。したがって、SaveChanges() を呼び出しても、 のすべての変更がデータベースに保持されない場合があります。

私の質問は次のとおりです。データベースへの追加の往復なしで、a または b に加えられた変更を失うことなく、a と b の間の m2m 関連付けを削除するにはどうすればよいですか?

[編集: 私が探しているのは、a と b の間に既存の m2m アソシエーションをアタッチできる a.BSet.Attach メソッドです]

私は最新バージョンの Entity Framework を使用しており、DbContext を使用しています。

どんな助けでも大歓迎です。

PS。これはhttp://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/5edea208-24cc-497b-8592-9cb025d558e4/の再投稿です

前もって感謝します、

メリジン

4

1 に答える 1

0

私は数日前に同じ問題を抱えていましたが、私が思いついた解決策は次のとおりです。

context.Entry(a).State = EntityState.Detached;
a.BSet.Add(b);
context.Entry(a).State = EntityState.Modified;
a.BSet.Remove(b);

そのコードを使用すると、m2m 関連付けを削除し、データベースへのすべての変更を保持する必要があります。

編集:ほぼ同じコードを作成したことに気付きました。エンティティを再アタッチして、状態を「変更済み」に変更するだけです。

于 2012-11-16T14:03:02.583 に答える