1

自己追跡エンティティを備えた EF を使用してアプリケーションを開発しています。STE は遅延読み込みをサポートしていないため、外部キーに変更を加えた後にエンティティのナビゲーション プロパティを更新するための推奨される方法またはベスト プラクティスは何ですか? これはここで説明されています:

http://msdn.microsoft.com/en-us/library/ff407090.aspx

「外部キー プロパティを設定してオブジェクト間の関係を変更すると、参照ナビゲーション プロパティが null に設定され、クライアント上の適切なプリンシパル エンティティに同期されません。グラフがオブジェクト コンテキストにアタッチされた後 (たとえば、 ApplyChanges メソッドを呼び出す)、外部キー プロパティとナビゲーション プロパティが同期されます。」

この問題は、次の場所で対処されています。

http://blogs.msdn.com/b/diego/archive/2010/10/06/self-tracking-entities-applychanges-and-duplicate-entities.aspx

しかし、これは本当にこれを行うための最良の方法ですか? この制限を回避するために使用した、または考えられる方法は何ですか? データグリッドにナビゲーション プロパティを表示し、レコードを変更するたびにそれらを null に設定するのが難しい場合、セルフ トラッキング エンティティを使用している人がいるとは信じがたいです。これが発生すると、私のアプリケーションではファンキーに見えます。確かに、保存後にサーバーに戻ってこれらのプロパティを更新することはできますが、サーバーに保存する呼び出しを行うまで、datagird には多数の null ナビゲーション プロパティがあります。

たとえば、ユーザーがデータグリッドからレコードを選択し、それを以下のフォームで編集するマスター詳細シナリオがあります。コンボボックスがバインドされている外部キーを変更すると、データグリッドのナビゲーション プロパティにバインドされたレコードが null に設定されます。この動作を回避し、外部キーが変更されたときにナビゲーション プロパティを更新するにはどうすればよいですか?

外部キーの代わりにナビゲーション プロパティを設定して関係を変更しようとすると、変更を送信しようとすると次の例外が発生します。

「オブジェクトのキー値が ObjectStateManager の別のオブジェクトと競合しているため、AcceptChanges を続行できません。AcceptChanges を呼び出す前に、キー値が一意であることを確認してください。」

マスター詳細データグリッドをエンティティのナビゲーション プロパティにバインドすることはできませんか? これを克服するための助けや方向性は大歓迎です。

ありがとう!

4

1 に答える 1

0

この種の問題に関する情報がほとんどないように思われることに、少し不満を感じています。最後に、このブログ投稿の 2 番目の提案を実行し、サービス呼び出しを 1 つのメソッドにグループ化することで、それを理解することができました。

http://blogs.msdn.com/b/diego/archive/2010/10/06/self-tracking-entities-applychanges-and-duplicate-entities.aspx

問題は、データベースに戻ってデータを再ロードする場合、ルックアップ テーブルも再ロードして、エラーを回避するために同じグラフに戻る必要があることです。これが STE の将来のバージョンで変更されることを願っています。

于 2012-04-26T22:39:02.437 に答える