Dela via


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