0

.NET3.5アプリケーションでEFv1とVelocityキャッシュを使用しています。キャッシュされたオブジェクトは、データベース内のエンティティモデルの表現です。そこで、POCOアダプターでEFv1を使用することにしました。したがって、キャッシュからオブジェクトを読み取り、存在しない場合はデータベースからオブジェクトを読み取り、すぐにキャッシュするエンティティアクセスレイヤーがあります。更新が必要なユースケースでは、ダーティPOCOをデータベースで更新する必要があります。ここでは、変更を追跡するバッキングオブジェクトが必要なため、ここでPOCOアダプターとプロキシを直接使用することはできません。フレームワークからアダプタオブジェクトをハイドレイトしたことがないため、変更の検出は行われません。私が見る最も簡単なオプションは次のとおりです。

  1. 更新する前にエンティティを読んでください。POCOからアダプタ値を設定します。変化検出を軌道に乗せましょう。これは、多くの関連エンティティを指定するとコストがかかる可能性があるすべての更新の前に選択を行います。
  2. 新しいエンティティオブジェクトを作成します。POCOからエンティティキーとプロパティを設定します。変更内容を保存。これにより、プロパティ/関連エンティティが変更されていない場合でも、不要な書き込みが行われます。

問題の説明で明確になったことを願っています。提案してください。

4

1 に答える 1

0

実は、1.と2.は同じであることがわかりました。デタッチされたオブジェクトの変更がエンティティ コンテキストに確実に変換されるようにするには、エンティティ全体を (関連と共に) 読み取る必要があります。このアプローチの注意点は次のとおりです。 1. 更新前に読み取る 2. 古い書き込み (デタッチされたオブジェクトのすべてのプロパティが更新されるため、実際に何を変更したかがわからないため、古い値を更新することになる可能性があります)

1. を回避する方法はないと思いますが、2. がビジネス要件にとって重要な場合 (つまり、古い値で上書きする余裕がないことを意味し、"IsChangedProperty" で変更しているフィールドを追跡し、それらのフィールドのみを更新します。これは、非常に苦痛ですが、残念ながら分離されたオブジェクトでは、EF v4もv1も休息を与えません:(

于 2011-08-09T11:54:29.280 に答える