utilizzando due database in .net

0

Sto cercando di implementare l'uso di due database nella mia applicazione, sqlite e mysql.

Attualmente ho aggiunto riferimenti a entrambe le librerie di connessione al database e duplicato tutti i primi controlli su quale opzione di database è stata selezionata dall'utente finale e chiamando la funzione appropriata.

Anche se ho implementato solo un test, ho pensato che sarebbe stato compito come l'applicazione fa un sacco di chiamate al database

esiste una classe di connessione dati generale o una libreria nel framework .net in modo che invece di istanziare MysqlConnection e SqliteConnection in modo diverso, io istanzia solo DatabaseConnection ?

C'è un modo migliore per farlo?

    
posta Smith 28.08.2016 - 13:36
fonte

3 risposte

3

Questa è una situazione in cui le cose sono andate male per molti sviluppatori nel tempo.

In un mondo perfetto sarebbe semplicemente iniettare la connessione scelta ovunque sia necessaria una connessione.

Ma SQL non è solo SQL. Ci sono così tante piccole differenze tra i diversi fornitori di database.

Questo significa che molto spesso avrai bisogno di istruzioni SQL diverse per i diversi provider di database.

Ciò funzionerà contro l'iniezione della connessione.

Vorrei avvolgere una strategia di statement (o una costruzione simile) attorno alla connessione in modo da poter iniettare la strategia dell'istruzione, rimuovendo la conoscenza della connessione effettivamente utilizzata che viene rimossa dagli oggetti dati.

    
risposta data 28.08.2016 - 14:04
fonte
3

Utilizza un ORM o un livello di astrazione del database

Esistono molti strumenti e framework esistenti che faranno il lavoro più pesante per te e ti permetteranno di supportare più database durante la scrittura del codice agnostico del database. Linq to SQL, NHibernate, Entity Framework ... consentono di gestire il database in modo astratto e di portarlo lontano. Questi strumenti sono molto maturi e sono stati temprati dalla battaglia, offrendoti una soluzione migliore di molte cose che altrimenti dovresti scrivere da solo.

    
risposta data 28.08.2016 - 20:00
fonte
0

In teoria entrambi implementano una classe come DbDataReader

Se hai intenzione di farlo attraverso MysqlConnection e SqliteConnection non sono sicuro

Classe DbConnection

Classe DbCommand

Quindi avresti un metodo per restituire un DbCommand e il resto dell'app non è nemmeno a conoscenza del provider sottostante.

Ciò che perdi sono extra che potrebbero essere stati aggiunti dal fornitore specifico.

Potresti entrare in un caso in cui le istruzioni select non sono compatibili anche se entrambi implementano DbCommand Class.

    
risposta data 29.08.2016 - 13:27
fonte

Leggi altre domande sui tag