8

タイトルを説明しよう。

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

ここで物事を単純にするために、データベースには 1 つのテーブル "Products" が含まれ、TestApp はデータベースのすべての "Products" をデータグリッドに表示し、TestApp は "Product" を追加/削除したり、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 Code First を介してデータベースの変更を認識するにはどうすればよいですか? 新しい項目が追加または削除されたために、Client_2 と Client_3 はデータグリッドを自動的に更新するにはどうすればよいでしょうか?

質問が多すぎるかどうかはわかりませんが、これを実証するための簡単なサンプル プロジェクトまたは簡単なコードが役立つでしょう。

参考までに: 私は EF Code First の初心者です。(私は .NET 4.0 と EF Code First 4.3.1 を使用しています)

前もって感謝します。

図式:

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

更新/編集:

わかりました。Entity Framework 自体が複数のクライアント間で同期を行わないことは明らかです。

だから私は別の質問をします: 私はクライアントサーバーの方法で作業することを考えています:

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

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

4

2 に答える 2

6

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

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

もう 1 つのアプローチは、MS SQL Service Broker の概要 (Service Broker)を使用することです。

望ましい結果を得るにはさまざまな方法がありますが、エンティティ フレームワークは ORM でもアプリケーション フレームワークでも .NET で構築されたアプリケーションの通信フレームワークでもあるため、エンティティ フレームワークに関連するものはありません。

于 2012-07-24T11:29:54.067 に答える
2

これは EF の責任ではなく、一般的なアプリケーションの設計によります。比較的単純なバックグラウンドまたは定期的なポーリング プロセスで問題を解決できます。

レコードのロックなど、複数のユーザーを扱う場合は、さらに考慮すべき点があります。この側面について少し調べて、特定の問題が発生した場合に戻ってくることをお勧めします。

于 2012-07-24T09:33:32.493 に答える