2012-07-24 13 views
7

Lasciatemi spiegare il titolo.Aggiornamenti dei dati del framework Entity in un ambiente multiutente con database centrale

Sto utilizzando il codice Entity Framework Primo in un'applicazione (TestApp). Per scopi di debug, la TestApp si connette a un database SQLExpress (server di database centrale).

Per semplificare le cose qui, il database contiene una tabella "Prodotti" e TestApp mostra tutti i "Prodotti" dal database in un datagrid e TestApp può aggiungere/eliminare un "Prodotto" o modificare il Nome prodotto.

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

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

Ho ad esempio 3 PC in cui TestApp è installato e in esecuzione (Li chiamerò Client_X). Se aggiungo un nuovo "Prodotto" tramite Client_1, questo non è direttamente visibile in TestApp su Client_2 e Client_3. Solo quando Client_2 e Client_3 recuperano tutti i dati (aggiornamento manuale) di quanto vedo il record appena aggiunto.

Che cosa voglio sapere: Come posso essere a conoscenza delle modifiche nel database tramite codice EF prima? In che modo Client_2 e Client_3 ottengono il loro datagrid automaticamente aggiornato perché un nuovo articolo è stato aggiunto o rimosso?

Non sono sicuro che venga richiesto troppo, ma un semplice progetto di esempio o un semplice codice per dimostrarlo sarebbe utile.

FYI: Sono abbastanza nuovo per il primo codice EF. (Sto usando .NET 4.0 e codice EF prima 4.3.1)

Grazie in anticipo.

Schema:

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

Aggiornamento/Modifica:

Ok, è chiaro che l'Entity Framework per sé non fa alcuna sincronizzazione tra più client.

quindi mi chiedo un'altra domanda: Sto pensando di lavorare il modo client-server:

  • Un'applicazione server singolo che crea il database e utilizza il codice di Entity Framework prima.
  • Più client che comunicano con l'applicazione del server singolo.

    Quale sarebbe ora il modo migliore per assicurarsi che i client utilizzino gli stessi dati e visualizzino gli aggiornamenti/modifiche di eachothers? (Gradirei esempi di codice.)

+0

Trovato una domanda correlata: http://stackoverflow.com/questions/4852564/entity-framework-underlying-data-in-database-change-notification – juFo

+0

Voglio fare esattamente la stessa cosa, ma con un'applicazione web . Ho più server Web che si collegano allo stesso DB - Prasad – Prasad

risposta

6

Non c'è nulla che è possibile utilizzare per notificare i client utilizzando il framework di entità. È possibile scrivere un sovraccarico per SaveChanges o creare un metodo di estensione ma, per quanto non si dispone di architettura client-> server, non riesco a immaginare come si possa ottenere ciò.

Se si utilizza WCF come gateway per il database, è possibile creare una comunicazione duplex tra client e server e, poiché i nuovi record sono disponibili, i client riceveranno una notifica utilizzando il canale di richiamata.

Un altro approccio è quello di utilizzare MS SQL Service Broker Overview (Service Broker)

Nonostante il fatto che ci sono molti modi diversi per ottenere risultato desiderato, nessuno di loro sono legati al quadro entità in quanto è ORM né un framework per applicazioni o Framework di comunicazione per applicazioni create con .NET.

2

Questa non è responsabilità di EF, è più basso per il vostro disegno generale dell'applicazione. Uno sfondo relativamente semplice o un processo di polling periodico risolverebbero il tuo problema.

Ci sono altre considerazioni quando si ha a che fare con più utenti, come il blocco dei record e può essere un'idea fare una piccola ricerca in questo aspetto e tornare indietro se e quando si ha un problema specifico.

+0

Il polling non sembra una buona soluzione? Generazione di traffico di rete aggiuntivo. Il database ha più lavoro e se un utente sta scorrendo in un datagrid la sua vista potrebbe ad esempio; ogni minuto viene ripristinato a causa di un aggiornamento che carica di nuovo tutti i dati. – juFo

+0

@juFo Sono solo suggerimenti, è necessario effettuare ricerche più generali su ambienti multiutente e calcolare autonomamente la migliore soluzione complessiva, dipenderà da molti fattori. Il mio punto è che non è un problema di EF. – ChrisBint

+0

Quindi non c'è assolutamente nulla in EF che ti dice che il tuo Contesto è obsoleto o che il database ha dati più recenti? – juFo

Problemi correlati