2012-07-24 5 views
7

タイトルを説明します。中央データベースを使用するマルチユーザー環境でのEntity Frameworkのデータ更新

私はアプリケーションでEntity Framework Code Firstを使用しています(TestApp)です。 デバッグの目的で、TestAppは、SQLExpressデータベース(セントラルデータベースサーバー)に接続します。

ここでは、データベースに「製品」という表が1つあり、TestAppにはデータグリッドのデータベースからすべての「製品」が表示され、TestAppは「製品」の追加/削除やProductNameの変更ができます。

public class Product { 
public int ProductId { get; set; } 
public string ProductName { get; set; } 
} 

public DbSet<Product> Products { get; set; } 

私は、たとえばTestAppがインストールされ実行されている3つのPCを持っています(私はClient_Xと呼んでいます)。 Client_1を介して新しい「製品」を追加すると、これはClient_2とClient_3のTestAppに直接表示されません。 Client_2とClient_3が新しく追加されたレコードよりもすべてのデータを再度フェッチする(手動リフレッシュ)場合のみ。

ご存知のこと: EFコードファーストでデータベースの変更を確認するにはどうすればよいですか? 新しいアイテムが追加または削除されたため、Client_2とClient_3は自動的にDataGridを更新しますか?

あまりにも多くの質問があるのか​​どうかは分かりませんが、これを実証するための簡単なサンプルプロジェクトや簡単なコードは役に立ちます。

FYI: 私はかなりEFコードファーストの新人です。 (私は.NET 4.0とEFコードファースト4.3.1を使用しています)

ありがとうございます。

スキーム:

Client_3< 
     \ 
      \ 
      \ 
      \ 
      \> 
Client_1 <---> [Central Database] <----> Client_2 

/編集更新:

OK、Entity Frameworkの自体が複数のクライアント間のいずれかの同期を行わないことは明らかです。

だから私は別の質問をするでしょう: 私はクライアントサーバーの道を働いてと思っています:

  • データベースを作成し、最初の Entity Frameworkのコードを使用する単一サーバーアプリケーションを。
  • その単一のサーバーと通信する複数のクライアント アプリケーション。

    クライアントが同じデータを使用し、お互いの更新/変更を確認する最良の方法は何でしょうか? (私は、コードサンプルをいただければ幸いです。)

+0

関連する質問が見つかりました:http://stackoverflow.com/questions/4852564/entity-framework-underlying-data-in-database-change-notification – juFo

+0

私はまったく同じことをしたいのですが、ウェブアプリケーション。私は複数のWebサーバーが同じDBに接続している - Prasad – Prasad

答えて

6

エンティティフレームワークを使用してクライアントに通知するために使用できるものは何もありません。 SaveChangesのオーバーロードを記述したり、拡張メソッドを作成することはできますが、クライアント - >サーバアーキテクチャを持たない限り、これを実現する方法は想像できません。

データベースへのゲートウェイとしてWCFを使用する場合は、クライアントとサーバーの間で二重通信を作成できます。新しいレコードが利用可能になると、コールバックチャネルを使用してクライアントに通知されます。

別のアプローチは、望ましい結果を得るために、多くの異なる方法があることを、事実にもかかわらず、MS SQLサービスブローカにOverview (Service Broker)

を使用することです、それはORMやアプリケーションフレームワークまたはあるとして、それらのどれもが、エンティティフレームワークに関連していません.NETで構築されたアプリケーションの通信フレームワーク。

2

これは、EFの責任ではない、それはあなたの一般的なアプリケーションの設計まで以上です。比較的単純な背景や定期的なポーリングプロセスで問題を解決できます。

レコードロックなど、複数のユーザーを扱うときにはさらに考慮すべき点があります。問題の側面を少し調べて、問題がある場合や戻ってくることが考えられます。

+0

ポーリングは良い解決策に見えませんか?余分なネットワークトラフィックを生成する。データベースにはより多くの作業があり、ユーザーがデータグリッド内をスクロールしている場合、そのビューは、すべてのデータを再度ロードするリフレッシュのために1分ごとにリセットされます。 – juFo

+0

@juFoこれは単なる提案であり、マルチユーザー環境に関するより一般的な調査を行い、全体的に最高のソリューションを見つけ出す必要があります。これは多くの要因に依存します。私のポイントはEFの問題ではないということです。 – ChrisBint

+0

EFには、あなたのコンテキストが古くなっているか、データベースに新しいデータがあることを伝えるものは何もありません。 – juFo

関連する問題