Abbiamo un DB aziendale che viene replicato attraverso molti siti in tutto il mondo. Vorremmo che la nostra app tenti di connettersi a uno dei siti locali e, se il sito non è attivo, vogliamo che ricada nel DB aziendale. Vorremmo questo comportamento su ciascuna delle nostre operazioni di DB.Schema generale per il failover da un database a un altro utilizzando Entity Framework?
Stiamo utilizzando Entity Framework, C# e SQL Server.
All'inizio speravo di poter specificare solo un "partner di failover" nella stringa di connessione, ma che funziona solo in un ambiente DB con mirroring, che non lo è. Ho anche esaminato la scrittura di una IDbExecutionStrategy personalizzata. Ma queste strategie consentono solo di specificare il modello per riprovare un'operazione DB fallita. Non ti permette di cambiare l'operazione in alcun modo come indirizzarla a una nuova connessione.
Quindi, è a conoscenza di qualsiasi schema valido per gestire questo tipo di operazione, oltre alla duplicazione della logica di riprova attorno a ciascuna delle nostre numerose operazioni DB?
Aggiornamento sulla 2014/05/14:
io elaboro in risposta ad alcune delle proposte già fatte.
devo molti luoghi in cui il codice simile al seguente:
try
{
using(var db = new MyDBContext(ConnectionString))
{
// Database operations here.
// var myList = db.MyTable.Select(...), etc.
}
}
catch(Exception ex)
{
// Log exception here, perhaps rethrow.
}
è stato suggerito che ho una routine che prima controlla ognuna delle corde connessioni e restituisce il primo che si connette con successo. Questo è ragionevole fin dove arriva. Ma alcuni degli errori che vedo sono timeout sulle operazioni, in cui la connessione funziona ma il DB ha problemi che impediscono il completamento dell'operazione.
Quello che sto cercando è un pattern che posso usare per incapsulare l'unità di lavoro e dire "Prova questo sul primo database." Se fallisce per qualsiasi motivo, esegui il rollback e provalo sul secondo DB. che fallisce, provalo sul terzo, ecc. fino a quando l'operazione ha successo o non hai più DB. " Sono abbastanza sicuro di poter girare il mio (e posterò il risultato se lo faccio), ma speravo che potesse esserci un modo noto per avvicinarsi a questo.
Potrei chiedere che venga spostato in dba.stackexchange.com, ma penso davvero che si tratti più di una domanda di programmazione/Entity Framework piuttosto che di una di amministrazione DB. Mi sbaglio? –
Sì, posso vederlo. Ignora la mia precedente affermazione :) – LittleBobbyTables
Quale sarebbe il tuo approccio alle transazioni allora? Se un'operazione fallita all'interno di una transazione è passata al db fallback nel mezzo della transazione? –