API di creazione ed eliminazione
I EnsureCreated() metodi e EnsureDeleted() offrono un'alternativa leggera alle migrazioni per la gestione dello schema del database. Questi metodi sono utili negli scenari in cui i dati sono temporanei e possono essere eliminati quando lo schema cambia. Ad esempio durante la creazione di prototipi, nei test o per le cache locali.
Alcuni provider (in particolare quelli non relazionali) non supportano le migrazioni. Per questi provider, EnsureCreated
spesso è il modo più semplice per inizializzare lo schema del database.
Avviso
EnsureCreated
e le migrazioni non funzionano bene insieme. Se si usano Migrazioni, non usare EnsureCreated
per inizializzare lo schema.
La transizione da EnsureCreated
a Migrazioni non è un'esperienza semplice. Il modo più semplice per eseguire questa operazione consiste nell'eliminare il database e ricrearlo usando Migrazioni. Se si prevede di usare le migrazioni in futuro, è consigliabile iniziare con le migrazioni invece di usare EnsureCreated
.
EnsureDeleted
Se EnsureDeleted
esistente, il metodo elimina il database. Se non si dispone delle autorizzazioni appropriate, viene generata un'eccezione.
// Drop the database if it exists
dbContext.Database.EnsureDeleted();
EnsureCreated
EnsureCreated
creerà il database se non esiste e inizializzerà lo schema del database. Se esistono tabelle (incluse tabelle per un'altra DbContext
classe), lo schema non verrà inizializzato.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreated();
Suggerimento
Sono disponibili anche versioni asincrone di questi metodi.
SQL Script
Per ottenere sql usato da EnsureCreated
, è possibile usare il GenerateCreateScript metodo .
var sql = dbContext.Database.GenerateCreateScript();
Più classi DbContext
EnsureCreated funziona solo quando nel database non sono presenti tabelle. Se necessario, è possibile scrivere un controllo personalizzato per verificare se lo schema deve essere inizializzato e usare il servizio IRelationalDatabaseCreator sottostante per inizializzare lo schema.
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();