2012-07-24 14 views
7

Pozwól mi wyjaśnić tytuł.Aktualizacje danych Entity Framework w środowisku wielu użytkowników z centralną bazą danych

Używam Entity Framework Code First w aplikacji (TestApp). Do celów debugowania, TestApp łączy się z bazą danych SQLExpress (centralny serwer bazy danych).

Aby wszystko było proste, baza danych zawiera jedną tabelę "Produkty", a TestApp pokazuje wszystkie "Produkty" z bazy danych w datagrid, a TestApp może dodać/usunąć "Produkt" lub zmodyfikować ProductName.

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

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

Mam na przykład 3 szt., Gdzie TestApp jest zainstalowany i działa (będę je nazwać Client_X). Jeśli dodaję nowy "Produkt" za pośrednictwem Client_1, to nie jest to bezpośrednio widoczne w TestApp w Client_2 i Client_3. Tylko wtedy, gdy Client_2 i Client_3 będą pobierać wszystkie dane ponownie (ręczne odświeżanie), niż widzę nowo dodany rekord.

Co chcę wiedzieć: Jak mogę się dowiedzieć o zmianach w bazie danych za pomocą kodu EF? W jaki sposób Client_2 i Client_3 otrzymają automatycznie aktualizację datagridu, ponieważ nowy element został dodany lub usunięty?

Nie jestem pewien, czy jest o to poproszony zbyt wiele, ale prosty przykładowy projekt lub prosty kod pokazujący to byłoby przydatne.

FYI: Jestem dość nowa w kodzie EF. (Używam .NET 4.0 i kod EF First 4.3.1)

Z góry dziękuję.

Schemat:

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

Aktualizacja/Edit:

Ok, to jest oczywiste, że sama Entity Framework nie zrobić żadnej synchronizacji pomiędzy wieloma klientami.

Więc będę zadać kolejne pytanie: myślę o pracy aż klient-serwer:

  • Aplikacja pojedynczy serwer, który tworzy bazę danych i wykorzystuje najpierw kodu Entity Framework.
  • Wiele klientów komunikujących się z tym pojedynczym serwerem aplikacji.

    Jaki byłby teraz najlepszy sposób, aby upewnić się, że klienci używają tych samych danych i widzą aktualizacje/zmiany dotyczące każdej innej osoby? (byłbym wdzięczny próbki kodu.)

+0

Znaleźliśmy pokrewne pytanie: http://stackoverflow.com/questions/4852564/entity-framework-underlying-data-in-database-change-notification – juFo

+0

Chcę zrobić dokładnie to samo, ale z aplikacją internetową . Mam wiele serwerów internetowych łączących się z tym samym DB - Prasad – Prasad

Odpowiedz

6

Nie ma niczego, co można wykorzystać do powiadomienia klientów za pomocą struktury obiektu. Możesz napisać przeciążenie dla SaveChanges lub utworzyć metodę rozszerzenia, ale o ile nie masz architektury klienta> serwera, nie mogę sobie wyobrazić, jak możesz to osiągnąć.

Jeśli używasz WCF jako bramy do bazy danych, możesz utworzyć dwustronną komunikację między klientem a serwerem, a ponieważ nowe rekordy będą dostępne, klienci będą powiadamiani za pomocą kanału zwrotnego.

Innym podejściem jest użycie MS SQL Service Broker Overview (Service Broker)

Pomimo faktu, że istnieje wiele różnych sposobów, aby uzyskać pożądany efekt, żaden z nich są związane z Entity Framework, jak to jest ORM ani ramy aplikacji lub Ramy komunikacji dla aplikacji zbudowanych z .NET.

2

To nie jest obowiązkiem EF, to bardziej w dół do ogólnej projektowania aplikacji. Stosunkowo proste tło lub okresowy proces odpytywania rozwiązałyby Twój problem.

Istnieje wiele czynników, które należy wziąć pod uwagę podczas pracy z wieloma użytkownikami, takie jak blokowanie rekordów. Może to być pomysł, aby wykonać pewne badania w tej sprawie i wrócić, jeśli wystąpi konkretny problem.

+0

Polling nie wygląda na dobre rozwiązanie? Generowanie dodatkowego ruchu sieciowego. Baza danych ma więcej pracy i jeśli użytkownik przewija w datagridie jego widok byłby np. każda minuta jest resetowana z powodu odświeżenia, które ponownie ładuje wszystkie dane. – juFo

+0

@juFo Są to tylko sugestie, będziesz musiał przeprowadzić bardziej ogólne badania w środowiskach wielu użytkowników i samemu wybrać najlepsze ogólne rozwiązanie, będzie ono zależne od wielu czynników. Chodzi mi o to, że nie jest to problem związany z EF. – ChrisBint

+0

Więc nie ma absolutnie nic w EF, który mówi ci, że twój kontekst jest nieaktualny lub że baza danych ma nowsze dane? – juFo

Powiązane problemy