Skapa och ta bort API:er
Metoderna EnsureCreatedAsync och EnsureDeletedAsync är ett enkelt alternativ till migreringar för att hantera databasschemat. Dessa metoder är användbara i scenarier när data är tillfälliga och kan tas bort när schemat ändras. Till exempel under prototyper, i tester eller för lokala cacheminnen.
Vissa leverantörer (särskilt icke-relationella) stöder inte migreringar. För dessa leverantörer är EnsureCreatedAsync
ofta det enklaste sättet att initiera databasschemat.
Varning
EnsureCreatedAsync
och migreringar fungerar inte bra tillsammans. Om du använder migreringar ska du inte använda EnsureCreatedAsync
för att initiera schemat.
Övergången från EnsureCreatedAsync
till migrationer är inte helt utan problem. Det enklaste sättet att göra det är att släppa databasen och återskapa den med hjälp av migreringar. Om du förväntar dig att använda migreringar i framtiden är det bäst att bara börja med migreringar i stället för att använda EnsureCreatedAsync
.
Se till att ta bortasynkronisering
Metoden EnsureDeletedAsync
tar bort databasen om den existerar. Om du inte har rätt behörigheter genereras ett undantag.
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
Se till attSkapaasynkronisering
EnsureCreatedAsync
skapar databasen om den inte finns och initierar databasschemat. Om det finns tabeller (inklusive tabeller för en annan DbContext
-klass) initieras inte schemat.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
Tips
Asynkrona versioner av dessa metoder är också tillgängliga.
SQL-skript
Om du vill hämta den SQL som används av EnsureCreatedAsync
kan du använda metoden GenerateCreateScript.
var sql = dbContext.Database.GenerateCreateScript();
Flera DbContext-klasser
EnsureCreated fungerar bara när det inte finns några tabeller i databasen. Om det behövs kan du skriva en egen kontroll för att se om schemat behöver initieras och använda den underliggande IRelationalDatabaseCreator-tjänsten för att initiera schemat.
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();