0

私のDBMSには、1対多の関係(A <-B)を持つ2つのテーブルがあります。最初の実行時に、次のようにA(Bを含む)のいくつかのレコードを取得しました。

var lst = from a in ctx.As.Include("Bs") select a;

だから、すべてが大丈夫です。しかし、数分後、他のアプリで変更される可能性があるため、もう一度取得したいと思います。

使ってみました

ctx.Refresh(RefreshMode.StoreWins, lst);

これを行うと、更新されるのはAではなくBからのオブジェクトだけです。したがって、次のような別の手順を実行する必要があります。

foreach (var a in lst) {
    ctx.Refresh(RefreshMode.StoreWins, a.Bs);
}

Bslinqステートメントに含めなくても、Load代わりにメソッドを使用しても問題ありません。Refresh

ここでの問題は、呼び出しが多すぎるRefreshLoad、パフォーマンスが低下する可能性があることです。それほど多くの呼び出しを行わずに、データベースストレージからそれらを再ロードするにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

しかし、数分後...

コンテキストは作業の単位であり、作業の単位は通常数分もかからないため、質問の基本的な答えは、新しいコンテキストを作成してクエリを再実行することです。

コンテキストが非常に長く存続しなければならないと本当に思っている場合(そのような場合、ローカルの変更を上書きしたくないので、そうしなければならないのではないかと思います)、これを試すことができます。

ctx.As.MergeOption = MergeOption.OverwriteChanges;
ctx.Bs.MergeOption = MergeOption.OverwriteChanges;
var lst = from a in ctx.As.Include("Bs") select a;
于 2012-05-28T10:00:02.000 に答える