Erstellen und Löschen von APIs
Die Methoden EnsureCreatedAsync und EnsureDeletedAsync bieten eine einfache Alternative zu Migrationen zum Verwalten des Datenbankschemas. Diese Methoden sind in Szenarien hilfreich, wenn die Daten vorübergehend sind und beim Ändern des Schemas gelöscht werden können. Beispiel: während der Prototyperstellung, bei Tests oder für lokale Caches.
Einige Anbieter (insbesondere nicht relationale) unterstützen keine Migrationen. Bei diesen Anbietern ist EnsureCreatedAsync
häufig die einfachste Möglichkeit, das Datenbankschema zu initialisieren.
Warnung
EnsureCreatedAsync
und Migrationen funktionieren nicht gut zusammen. Wenn Sie Migrationen verwenden, verwenden Sie nicht EnsureCreatedAsync
, um das Schema zu initialisieren.
Der Übergang von EnsureCreatedAsync
zu Migrationen ist nicht einfach. Die einfachste Möglichkeit besteht darin, die Datenbank abzulegen und mithilfe von Migrationen neu zu erstellen. Wenn Sie in der Zukunft die Verwendung von Migrationen planen, ist es am besten, gleich mit Migrationen zu beginnen, anstatt EnsureCreatedAsync
zu verwenden.
EnsureDeletedAsync
Die EnsureDeletedAsync
-Methode wird die Datenbank löschen, falls sie existiert. Wenn Sie nicht über die entsprechenden Berechtigungen verfügen, wird eine Ausnahme ausgelöst.
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
EnsureCreatedAsync
EnsureCreatedAsync
erstellt die Datenbank, wenn sie nicht vorhanden ist, und initialisiert das Datenbankschema. Wenn Tabellen vorhanden sind (einschließlich Tabellen für eine andere DbContext
Klasse), wird das Schema nicht initialisiert.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
Tipp
Asynchrone Versionen dieser Methoden sind ebenfalls verfügbar.
SQL-Skript
Um die von EnsureCreatedAsync
verwendete SQL abzurufen, können Sie die GenerateCreateScript-Methode verwenden.
var sql = dbContext.Database.GenerateCreateScript();
Mehrere DbContext-Klassen
EnsureCreated funktioniert nur, wenn keine Tabellen in der Datenbank vorhanden sind. Bei Bedarf können Sie eine eigene Überprüfung schreiben, um festzustellen, ob das Schema initialisiert werden muss, und den zugrunde liegenden IRelationalDatabaseCreator-Dienst zum Initialisieren des Schemas verwenden.
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();