3

DbContext に関連付けられた DbSet があります (Entity Framework 4.3 を使用)。DbSet には、最初に特定のテーブル X のすべてのエンティティがロードされます。問題は、テーブル X の 1 つまたは複数の行を削除した後 (削除が完了した後)、テーブル X の新しいリストを取得するために DbSet をリロードできないことです。別のアプリケーションの別の DbContext によって)。

テーブルのすべてのエンティティをリロードするために使用している行は次のとおりです。

 ((IObjectContextAdapter) context).ObjectContext.Refresh(RefreshMode.ClientWins, col);

その行は、追加されたエンティティまたは変更されたエンティティを取得するために正しく機能しています。

私のDbContextは別のエンティティも運んでいて、それらをすべてリロードするには時間がかかりすぎるため、DbContextを破棄して新しいエンティティを取得することもできません(次のルールに従っていないことはわかっています:DbContextは国境を越えたオブジェクトとして使用する必要があります)

4

1 に答える 1

4

コレクションを「クリア」してLocalから再ロードできます。

foreach (var x in context.Set<X>().Local.ToList())
{
    Entry(x).State = EntityState.Detached;
}
context.Set<X>().Load();

context.Set<X>().Local.Clear();コレクション内のすべてのアイテムが としてマークされDeleted、アイテムがリロードされないため、実行できません。

(礼儀コードファースト:ローカルコレクションの問題)。

于 2013-10-30T11:05:44.073 に答える