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 EnsureCreatedAsync
te 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 EnsureCreatedAsync
wordt 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();