Delen via


API's maken en neerzetten

De methoden EnsureCreatedAsync en EnsureDeletedAsync bieden een lichtgewicht alternatief voor Migrations voor het beheren van het databaseschema. Deze methoden zijn handig in scenario's waarin de gegevens tijdelijk zijn en kunnen worden verwijderd wanneer het schema wordt gewijzigd. Bijvoorbeeld tijdens het maken van prototypen, in tests of voor lokale caches.

Sommige providers (met name niet-relationele) bieden geen ondersteuning voor migraties. Voor deze providers is EnsureCreatedAsync vaak de eenvoudigste manier om het databaseschema te initialiseren.

Waarschuwing

EnsureCreatedAsync en migraties werken niet goed samen. Als u Migraties gebruikt, gebruikt u geen EnsureCreatedAsync om het schema te initialiseren.

Overstappen van EnsureCreatedAsync naar migraties is geen naadloze ervaring. De eenvoudigste manier is om de database te verwijderen en opnieuw te maken met behulp van de Migraties. Als u verwacht dat u in de toekomst migraties gebruikt, kunt u het beste beginnen met migraties in plaats van EnsureCreatedAsyncte gebruiken.

EnsureDeletedAsync

Met de methode EnsureDeletedAsync wordt de database verwijderd als deze bestaat. Als u niet over de juiste machtigingen beschikt, wordt er een uitzondering gegenereerd.

// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();

EnsureCreatedAsync

EnsureCreatedAsync maakt de database aan als deze niet bestaat en initialiseert het databaseschema. Als er tabellen bestaan (inclusief tabellen voor een andere DbContext klasse), wordt het schema niet geïnitialiseerd.

// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();

Hint

Asynchrone versies van deze methoden zijn ook beschikbaar.

SQL-script

Als u de SQL wilt ophalen die door EnsureCreatedAsyncwordt gebruikt, kunt u de methode GenerateCreateScript gebruiken.

var sql = dbContext.Database.GenerateCreateScript();

Meerdere DbContext-klassen

EnsureCreated werkt alleen als er geen tabellen aanwezig zijn in de database. Indien nodig kunt u uw eigen controle schrijven om te zien of het schema moet worden geïnitialiseerd en de onderliggende IRelationalDatabaseCreator-service gebruiken om het schema te initialiseren.

// TODO: Check whether the schema needs to be initialized

// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();