Creare e eliminare API
I metodi EnsureCreatedAsync e EnsureDeletedAsync 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, EnsureCreatedAsync
è spesso il modo più semplice per inizializzare lo schema del database.
Avvertimento
EnsureCreatedAsync
e le migrazioni non funzionano bene insieme. Se si usano Migrazioni, non usare EnsureCreatedAsync
per inizializzare lo schema.
La transizione da EnsureCreatedAsync
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 EnsureCreatedAsync
.
EnsureDeletedAsync
Il metodo EnsureDeletedAsync
elimina il database, se esistente. Se non si dispone delle autorizzazioni appropriate, viene generata un'eccezione.
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
EnsureCreatedAsync
EnsureCreatedAsync
creerà il database se non esiste e inizializzerà lo schema del database. Se esistono tabelle (incluse tabelle per un'altra classe DbContext
), lo schema non verrà inizializzato.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
Mancia
Sono disponibili anche versioni asincrone di questi metodi.
SQL Script
Per ottenere l'SQL usato da EnsureCreatedAsync
, è possibile usare il metodo GenerateCreateScript.
var sql = dbContext.Database.GenerateCreateScript();
Classi DbContext multiple
EnsureCreated funziona solo quando non sono presenti tabelle nel database. 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();