Freigeben über


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