自己追跡エンティティを備えた EF を使用してアプリケーションを開発しています。STE は遅延読み込みをサポートしていないため、外部キーに変更を加えた後にエンティティのナビゲーション プロパティを更新するための推奨される方法またはベスト プラクティスは何ですか? これはここで説明されています:
http://msdn.microsoft.com/en-us/library/ff407090.aspx
「外部キー プロパティを設定してオブジェクト間の関係を変更すると、参照ナビゲーション プロパティが null に設定され、クライアント上の適切なプリンシパル エンティティに同期されません。グラフがオブジェクト コンテキストにアタッチされた後 (たとえば、 ApplyChanges メソッドを呼び出す)、外部キー プロパティとナビゲーション プロパティが同期されます。」
この問題は、次の場所で対処されています。
しかし、これは本当にこれを行うための最良の方法ですか? この制限を回避するために使用した、または考えられる方法は何ですか? データグリッドにナビゲーション プロパティを表示し、レコードを変更するたびにそれらを null に設定するのが難しい場合、セルフ トラッキング エンティティを使用している人がいるとは信じがたいです。これが発生すると、私のアプリケーションではファンキーに見えます。確かに、保存後にサーバーに戻ってこれらのプロパティを更新することはできますが、サーバーに保存する呼び出しを行うまで、datagird には多数の null ナビゲーション プロパティがあります。
たとえば、ユーザーがデータグリッドからレコードを選択し、それを以下のフォームで編集するマスター詳細シナリオがあります。コンボボックスがバインドされている外部キーを変更すると、データグリッドのナビゲーション プロパティにバインドされたレコードが null に設定されます。この動作を回避し、外部キーが変更されたときにナビゲーション プロパティを更新するにはどうすればよいですか?
外部キーの代わりにナビゲーション プロパティを設定して関係を変更しようとすると、変更を送信しようとすると次の例外が発生します。
「オブジェクトのキー値が ObjectStateManager の別のオブジェクトと競合しているため、AcceptChanges を続行できません。AcceptChanges を呼び出す前に、キー値が一意であることを確認してください。」
マスター詳細データグリッドをエンティティのナビゲーション プロパティにバインドすることはできませんか? これを克服するための助けや方向性は大歓迎です。
ありがとう!