5

このアプリケーションは、実際には Web アプリケーションとコンソール アプリケーションの 2 つのアプリケーションです。コンソール アプリケーションは、Windows マシンでスケジュールされたタスクとして使用され、1 日に 3 回実行され、いくつかの定期的な作業が行われます。どちらのアプリケーションも、別のプロジェクト (クラス ライブラリ) に配置されている同じモデルとリポジトリを使用します。問題は、コンソール アプリケーションがデータベースにいくつかの変更を加える必要がある場合、モデル エンティティを更新して変更をデータベースに保存することですが、これが発生した場合、webbapplication のコンテキストはこれを認識しないため、オブジェクト コンテキストは更新されません。新しい/更新されたデータとアプリケーションのユーザーは変更を見ることができません。

私の質問は次のとおりです。オブジェクトコンテキストに、ホールオブジェクトコンテキストまたは特定のクエリのいずれかで、常にデータベースからデータをロードするように指示する方法はありますか?

/よろしくヴィンブラッド

4

4 に答える 4

2

Web アプリケーションでこの問題が発生する必要はないと思います。Web アプリケーションの ObjectContext はリクエストごとに作成する必要があるため、更新中のリクエスト処理のみが影響を受けます。

とにかく、ObjectContext にデータの再読み込みを強制できるメソッドはほとんどありません。クエリとロード関数では、現在のデータを上書きできる MergeOption を渡すことができます。しかし、最も興味深いのは、特にこのアプリケーションの Refresh メソッドです。

于 2010-10-06T20:38:38.560 に答える
2

DbSet を使用すると、.AsNoTracking() メソッドも使用できます。

于 2016-09-20T12:45:38.980 に答える
1

次のようなものを実行するたびに

context.Entities.FirstOrDefault()

またはコンテキストに対するクエリが何であれ、データは実際にはデータベースから取得されるため、問題は発生しないはずです。

ウェブアプリでのあなたのObjectContext寿命は? ObjectContext は UnitOfWork であるため、データを取得/書き込み/更新するためにのみ作成し、その後すぐに破棄する必要があります。ここで同様の質問を見つけることができます:

ObjectContext を更新するか、データベースに加えられた変更を反映するために再作成しますか?

于 2010-10-06T11:04:58.880 に答える
0

FWIW、クエリで新しい(匿名の)オブジェクトを作成すると、データベースへのラウンドトリップも強制されます。

' queries from memory    
context.Entities.FirstOrDefault()

' queries from db
context.Entities.Select(Function(x) New With {p.ID, p.Name}).FirstOrDefault()

VBを許してください、それは私の母国語です:)

于 2014-06-30T09:44:02.333 に答える