2012-07-24 20 views
7

Lassen Sie mich den Titel erklären.Entity Framework Daten Updates in einer Multi-User-Umgebung mit zentraler Datenbank

Ich verwende Entity Framework Code zuerst in einer Anwendung (TestApp). Für Debugging-Zwecke verbindet sich die TestApp mit einer SQLExpress-Datenbank (zentraler Datenbankserver).

Um die Dinge hier einfach zu halten, enthält die Datenbank eine Tabelle "Produkte" und die TestApp zeigt alle "Produkte" aus der Datenbank in einem Datagrid und TestApp kann ein "Produkt" hinzufügen/löschen oder den ProductName ändern.

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

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

Ich habe zum Beispiel 3 PCs, wo TestApp installiert ist und läuft (ich sie Client_X nennen werde). Wenn ich über Client_1 ein neues "Produkt" hinzufüge, dann ist dies in der TestApp auf Client_2 und Client_3 nicht direkt sichtbar. Nur wenn Client_2 und Client_3 alle Daten erneut abrufen (manuelle Aktualisierung), sehe ich den neu hinzugefügten Datensatz.

Was ich wissen möchte: Wie kann ich Änderungen in der Datenbank über EF-Code zuerst bemerken? Wie würden Client_2 und Client_3 ihr Datagrid automatisch aktualisiert bekommen, weil ein neues Objekt hinzugefügt oder entfernt wurde?

Ich bin nicht sicher, ob es zu viel verlangt wird, aber ein einfaches Beispielprojekt oder einfacher Code, um dies zu demonstrieren, wäre nützlich.

FYI: Ich bin relativ neu zu EF-Code zuerst. (Ich benutze .NET 4.0 und EF-Code zuerst 4.3.1)

Vielen Dank im Voraus.

Scheme:

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

Update/Edit:

Ok, es ist klar, dass das Entity Framework selbst keine Synchronisierung zwischen mehreren Clients macht.

Also werde ich eine andere Frage stellen: Ich denke, die Client-Server-Arbeitsweise:

  • Eine einzelne Server-Anwendung, die zuerst die Datenbank und verwendet den Entity Framework Code erstellt.
  • Mehrere Clients, die mit diesem einzelnen Server kommunizieren Anwendung.

    Was wäre jetzt der beste Weg, um sicherzustellen, dass die Kunden die gleichen Daten verwenden und Aktualisierungen/Änderungen an den anderen Benutzern sehen? (ich würde Codebeispiele zu schätzen wissen.)

+0

Gefunden eine verwandte Frage: http://stackoverflow.com/questions/4852564/entity-framework-underlying-data-in-database-change-notification – juFo

+0

Ich möchte genau das gleiche tun, aber mit einer Webanwendung . Ich habe mehrere Web-Server mit der gleichen DB verbinden - Prasad – Prasad

Antwort

6

Sie können nichts verwenden, um Clients über das Entity-Framework zu benachrichtigen. Sie können eine Überladung für SaveChanges schreiben oder eine Erweiterungsmethode erstellen, aber soweit Sie keine Client-> Server-Architektur haben, kann ich mir nicht vorstellen, wie Sie das erreichen können.

Wenn Sie WCF als Gateway zur Datenbank verwenden, können Sie eine Duplex-Kommunikation zwischen Ihrem Client und Server erstellen, und wenn neue Datensätze verfügbar sind, werden die Clients über den Rückrufkanal benachrichtigt.

Ein weiterer Ansatz ist MS SQL Service Broker Overview (Service Broker)

Trotz der Tatsache zu nutzen, dass es viele verschiedene Möglichkeiten, gewünschte Ergebnis zu erhalten, keiner von ihnen zu Entity Framework verwandt, wie es ORM ist noch ein Anwendungs-Framework oder Kommunikationsrahmen für Anwendungen, die mit .NET erstellt wurden.

2

Dies ist nicht in der Verantwortung von EF ist, ist es bis zu Ihrem allgemeinen Anwendungsdesign ist. Ein relativ einfacher Hintergrund oder ein periodischer Polling-Prozess würde Ihr Problem lösen.

Es gibt mehr Überlegungen im Umgang mit mehreren Benutzern, z. B. Datensatzsperrung, und es könnte eine Idee sein, ein wenig Forschung in diese Seite der Dinge zu tun und zurückkommen, wenn und wenn Sie ein bestimmtes Problem haben.

+0

Polling sieht nicht eine gute Lösung? Generieren zusätzlichen Netzwerkverkehrs Die Datenbank hat mehr Arbeit und wenn ein Benutzer in einem Datagramm scrollt, würde seine Ansicht z.B. Jede Minute wird zurückgesetzt, weil eine Aktualisierung alle Daten erneut lädt. – juFo

+0

@juFo Sie sind nur Vorschläge, Sie müssen mehr allgemeine Forschung in Multi-User-Umgebungen und die beste Gesamtlösung selbst herausfinden, wird es von einer Vielzahl von Faktoren abhängig sein. Mein Punkt ist, dass es kein EF-Problem ist. – ChrisBint

+0

Also gibt es absolut nichts in EF, das Ihnen sagt, dass Ihr Kontext veraltet ist oder dass die Datenbank neuere Daten hat? – juFo