2

長いエンティティ フレームワーク コンテキストが実行されています (理由は聞かないでください...)。ユーザー エンティティとその関連付けを取得するクエリを使用します。

var user = entities.UserSet.Include("UserAddresses")
                   .Where(u => u.Id == 1).FirstOrDefault();

ユーザー アドレスの行がデータベースから (別のプロセスによって) 削除され、このクエリを再度実行すると、呼び出しの前に MergeOption を設定していても (データベースにアクセスするために)、削除された行が取得されます。いずれにせよ、キャッシュを使用しないでください):

(クエリにあるセットを試してみましたが、成功しませんでした)

entities.UserSet.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;
entities.UserAddress.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;
entities.UserSet.Include("UserAddresses").MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;

誰でもこの問題を解決できますか?

4

2 に答える 2

2

ディスク上にないメモリ内の項目を自動的に削除するオプションはありません。

http://blog.dynatrace.com/2009/03/11/adonet-entity-framework-unexpected-behaviour-with-mergeoptions/

コンテキスト全体をクリアすることもできますが、それによって他の問題が発生する可能性があります。

基本的に、EF は実行時間の長いコンテキストではうまく機能しません。実行時間の長いコンテキストを削除することで、問題を修正し、より安定したシステムを取得する方が速い場合があります。

于 2009-12-22T10:31:18.960 に答える
0

削除後に選択する前に .SaveChanges() に行きました。これを回避する方法は他にありません。

于 2009-12-25T11:57:18.310 に答える