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();