ASP.NETアプリケーションで切断されたPOCOモデルを更新する際に問題が発生しました。
次のモデルがあるとしましょう。
- ユーザー
- 地区
- 注文
ユーザーは0以上の地区を担当でき、注文は地区に属し、ユーザーは注文の所有者になることができます。
ユーザーがログインすると、ユーザーと関連する地区が読み込まれます。その後、ユーザーは注文を読み込み、注文の所有者として自分自身を設定します。ユーザー(および関連する地区)と注文(および関連する地区)は、2つの異なるdbcontextを使用した2つの異なる呼び出しでロードされます。ユーザーが注文を割り当てた後で注文を保存したとき。オブジェクトのキー値が別のオブジェクトと競合しているため、acceptchangesを続行できないという例外が発生します。
同じ地区がユーザーが責任を負う地区のリストと注文の両方に表示される可能性があるため、これは奇妙なことではありません。
私はこの問題の解決策を高低で検索しましたが、私が見つけた答えは次のいずれかであるようです:
- 私の場合、ユーザーの地区となるオブジェクトの1つの関連エンティティをロードしないでください。
- オブジェクトを使用してユーザーを注文に割り当てるのではなく、注文オブジェクトに外部キーIDを設定するだけです。
- 明らかにそれを処理するので、nHibernateを使用してください。
1を試しましたが、うまくいきましたが、注文に関連付ける前に地区なしでユーザーをロードするか、浅いクローンを作成する必要があるため、これは間違っていると感じています。これは、この単純なケースでは問題ありませんが、問題は、私の場合、地区がグラフにさらに数回表示される可能性があることです。また、オブジェクトがあるので意味がないようですので、それらを接続してグラフを更新してみませんか。注文のグラフ全体が必要な理由は、すべての情報をユーザーに表示する必要があるためです。それで、すべてのオブジェクトを取得したので、これを機能させるために、なぜそれをリロードまたはシャロークローンする必要があるのですか?
STEを使用してみましたが、別のコンテキストによってロードされたグラフにオブジェクトをアタッチできないため、同じ問題が発生しました。だから私は正方形1に戻っています。
これはチュートリアルコード以外の一般的な問題だと思います。それでも、私はこれに対する良い解決策を見つけることができないようです。これは、私がどのような状況でもPOCO / EFの使用を理解していないか、この問題の答えを見つけるためにgoogleを使用するのが苦手だと思います。
JuliaLermanのO'Reillyから両方の「ProgrammingEntityFramework」の本を購入しましたが、これらの本でも私の問題を解決するものが見つからないようです。
一部のオブジェクトが繰り返され、必ずしも同じコンテキストからロードされるとは限らないグラフの処理方法に光を当てることができる人はいますか?