Freigeben über


Erstellen und Löschen von APIs

Die Methoden EnsureCreated() und EnsureDeleted() 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 EnsureCreated häufig die einfachste Möglichkeit, das Datenbankschema zu initialisieren.

Warnung

EnsureCreated und Migrationen funktionieren nicht gut zusammen. Wenn Sie Migrationen verwenden, verwenden Sie nicht EnsureCreated, um das Schema zu initialisieren.

Der Übergang von EnsureCreated zu Migrationen ist keine nahtlose Erfahrung. Die einfachste Möglichkeit besteht darin, die Datenbank zu löschen und mithilfe von Migrationen neu zu erstellen. Wenn Sie die Verwendung von Migrationen in Zukunft antizipieren, ist es am besten, einfach mit Migrationen zu beginnen, anstatt EnsureCreated zu verwenden.

EnsureDeleted

Die EnsureDeleted-Methode wird die Datenbank löschen, sofern sie vorhanden ist. Wenn Sie nicht über die entsprechenden Berechtigungen verfügen, wird eine Ausnahme ausgelöst.

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

EnsureCreated

EnsureCreated 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.EnsureCreated();

Tipp

Asynchrone Versionen dieser Methoden sind ebenfalls verfügbar.

SQL-Skript

Um die von EnsureCreated 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();