Lasciatemi inserire un altro punto di vista. La manutenzione del database di Entity Framework è assolutamente inutile in qualsiasi azienda o progetto di database di grandi dimensioni.
I problemi sono:
-
Aggiornamenti automatici dello schema. Questo non è assolutamente ciò che voglio in quanto viola totalmente i fondamenti della manutenzione del database. I problemi sono: (a) qualcuno che esegue una versione più recente aggiorna il database invece di ottenere un problema e (b) gli aggiornamenti sono pianificati con il dba che normalmente effettua un backup PRIMA. Quindi, gli aggiornamenti automatici sono inutili.
-
La creazione di Db funziona solo su casi edge degenerati. Non provare nemmeno a utilizzare le funzionalità avanzate del database, a prescindere da quale. Esempio di server Sql: campi inclusi in indici, filtri su indici, partizionamento, compressione, regole di convalida per i campi.
-
Migrazione - assume di nuovo casi degenerati: nessuna trasformazione dei dati o aggiornamento multiparto facilmente. Esempio: la tabella X ha un campo "utente" storico che registra che l'utente fa qualcosa. La nuova configurazione ha una tabella utente, quindi è necessario creare la tabella utente, quindi creare gli utenti, quindi creare il campo di riferimento utente nella tabella x, quindi aggiornarlo con l'utente dalla tabella utente, quindi eliminare il campo utente.
L'unico modo sensato per gestire questi scenari sono gli script di generazione e migrazione e il controllo delle versioni appropriato.
Ora, SSDT - questo è un ottimo strumento per la versione di una specifica versione di database molto meglio di Entity Framework perché in realtà - funziona. Come in: registra tutte le funzionalità. Su nessuno dei database che ho, potrei usare il codice in primis - perché abbiamo sempre almeno degli indici filtrati;) EF non mi porterebbe nemmeno al 10% di quello che mi serve.
Il nostro approccio è:
-
Crea un database nel database, quindi sincronizza un modulo SSDT che viene archiviato. La sincronizzazione dello schema consente agli sviluppatori di aggiornare rapidamente la loro versione. C'è sempre un database master autorevole con la versione corrente da qualche parte (su un server speciale) quindi abbiamo una versione di riferimento contro cui lavorare.
-
Genera script delta come necessario per le versioni che ottengono anche la versione e dispongono di un buon meccanismo per la loro distribuzione in un database.