2012-01-16 11 views
0

私はVS2010でEF 4.0を使用しています。私は2つのクライアントが私のアプリケーションを実行している。 1つのクライアントに変更を保存すると、SQLサーバーに変更が表示されますが、2番目のクライアントには表示されません。 変更を確認するには、アプリケーションを再起動する必要があります。 私はすべてのDBのものにデータレイヤーを使用していますが、私はいつも開いています。任意の回避策私は再度ゼロからDLを書き込むことはできません。あなたが他の接続でそれを変更したときEntity Framework savechanges - 他のクライアントの変更を見ることができません

10倍

+0

なぜあなたは接続を開いたままにしますか?それはあなたがすべきことのようには聞こえません。 – BrokenGlass

+0

あなたが言及した実際の "データレイヤー"は、イントラネット上のSQLサーバーかローカルのSQL Expressデータベースですか? – OmegaMan

答えて

4

既定では、上記のエンティティを含むエンティティのセットをデータベースに照会するときにインスタンスが返されるコンテキストにエンティティが読み込まれる場合。

データベースに変更を加えるには、MergeOptionOverwriteChangesに設定する必要があります。

context.Products.MergeOption = MergeOption.OverwriteChanges; 
var products = context.Products.Where(/**/); 

このような問題を避けるためには、短命のコンテキストを作成する方がよいでしょう。

+0

"context.Products.MergeOption = MergeOption.OverwriteChanges;"を実行する必要がありますか? DBへの各呼び出しの前に、またはそれを一度設定することはできますか? – Kulpemovitz

+0

@Kulpemovitz以降のすべてのクエリは影響を受けます。だから、気をつけて、いつもその設定を望まないかもしれません。 – Eranga

+0

まあ、私はクライアントが同じデータを表示する必要があります。これは生産管理アプリケーションです。 "So Be Careful"の最悪のシナリオは何ですか? – Kulpemovitz

1

EntityFramworkは、データを更新されていません。新しい状態を取得するには、コンテキストを再作成してすべてのデータを再度ロードする必要があります。

関連する問題