23

データベース内の大量のデータを変更するストアド プロシージャがあります。このストアド プロシージャは、同時にデータ操作に EF を使用するアプリケーションから呼び出されます。

ボタンをクリックすると、ストアド プロシージャがデータベースで実行され、データが変更され、EF が古いデータをユーザーに表示します。

DbContext または ObjectContext にデータベースからデータを強制的に更新させる方法はありますか? ObjectContext. Refresh() が解決策かもしれませんが、変更される可能性のあるすべてのテーブルに対してこのメ​​ソッドを呼び出したくありません。すべてのテーブルを一度に更新したい。

.NET 4.0 を対象とする Entity Framework 5 を使用しています

編集: 追加されたデータは利用可能ですが、既存のデータの変更は EF に反映されません。新しく追加されたレコードは表示されますが、既存のレコードに加えた変更は表示されません。

4

2 に答える 2

17

あなたDbContextは短命であるべきです。それを作成し、クエリを実行して、破棄します。

using (var context = new MyProject.DbContext())
{
    // run your query here
}

コンテキストを保持しないでください。そうすれば、古いデータで問題が発生することはありません。

于 2013-09-16T14:33:50.923 に答える
3
db = new DbContext())
var context= ((Infrastructure.IObjectContextAdapter)db).ObjectContext;
context.Refresh(Core.Objects.RefreshMode.StoreWins, context.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged | EntityState.Modified))
于 2013-09-16T14:26:49.113 に答える