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