Ho molte applicazioni client che si sincronizzano con un server centrale. Sto usando C #, MS SQL server, Win Forms, ASP.NET MVC + API.
Devo imparare / capire come eseguire una sincronizzazione a 2 vie per le modifiche dei dati nel mio database del server e nei database locali.
Il mio server e i database locali sono quasi (ma non del tutto) una corrispondenza esatta.
Ci sono tabelle per Dipendenti, Articoli, Prodotti, Posizioni, ecc. e queste possono essere modificate sul server o su un client locale - > Ho bisogno di unire questi dati.
Esempio 1:
Ho prodotti in una posizione e memorizzo il qty che c'è. La Qtà in loco può essere modificata tramite il sito Web o il client (contemporaneamente prima di una sincronizzazione).
Soluzione potenziale 1:
Per ogni tabella di database che ho; Faccio una tabella di controllo per le modifiche contro di loro e li sincronizzo, ad es.
ProductInLocation
- prodotto
- posizione
- Quantità
ProductInLocationAudit
- ProductBefore
- ProductAfter
- LocationBefore
- LocationAfter
- QtyBefore
- QtyAfter
Quindi sul server posso calcolare le differenze per tabella e sincronizzare di conseguenza (cioè ServerQty = LocalQtyAfter - LocalQtyBefore)
Potential Solution 2:
Conservo tutte le modifiche su tutte le tabelle in un singolo database:
AuditTable
- Modello
- Proprietà
- BeforeValue
- AfterValue
- DataType
In questo modo posso usare Reflection ?? per prendere i modelli corretti, calcolare la differenza tra numeri interi e semplicemente sovrascrivere le stringhe per sincronizzare i dati.
Soluzione potenziale 3:
Microsoft Sync Framework
Sembra che farebbe il lavoro, ma credo che stia per essere / sta per essere tramortito?
Potential Solution 4:
Tieni traccia delle modifiche dei dati utilizzando direttamente SQL Server, tuttavia sarebbe difficile inserirli nel controllo del codice sorgente e richiederebbe un codice avanzato per manipolare i dati prima di salvarli (ad esempio, per calcolare le differenze integer).
Quale soluzione dovrei prendere (se esiste)? Qual è il minimo di insidie / è più probabile che funzioni con successo?
C'è un modo standard / corretto di fare questo tipo di cose?