Erstellen und Löschen von APIsCreate and Drop APIs

Die ensuneu-und ensuredeleted-Methoden stellen eine leichte Alternative zu Migrationen zum Verwalten des Datenbankschemas dar.The EnsureCreated and EnsureDeleted methods provide a lightweight alternative to Migrations for managing the database schema. Diese Methoden sind in Szenarios nützlich, in denen die Daten vorübergehend sind und gelöscht werden können, wenn sich das Schema ändert.These methods are useful in scenarios when the data is transient and can be dropped when the schema changes. Beispielsweise während der Prototyperstellung in Tests oder für lokale Caches.For example during prototyping, in tests, or for local caches.

Einige Anbieter (insbesondere nicht relationale) unterstützen keine Migrationen.Some providers (especially non-relational ones) don't support Migrations. Für diese Anbieter ist "ensuneu" oft die einfachste Möglichkeit, das Datenbankschema zu initialisieren.For these providers, EnsureCreated is often the easiest way to initialize the database schema.

Warnung

Ensuneu erstellte und Migrationen funktionieren nicht gut zusammen.EnsureCreated and Migrations don't work well together. Wenn Sie Migrationen verwenden, verwenden Sie "ensurecreated" nicht, um das Schema zu initialisieren.If you're using Migrations, don't use EnsureCreated to initialize the schema.

Der Übergang von ensuneu in Migrationen ist nicht nahtlos.Transitioning from EnsureCreated to Migrations is not a seamless experience. Die einfachste Möglichkeit hierzu besteht darin, die Datenbank zu löschen und Sie mithilfe von Migrationen neu zu erstellen.The simplest way to do it is to drop the database and re-create it using Migrations. Wenn Sie die Verwendung von Migrationen in der Zukunft erwarten, empfiehlt es sich, einfach mit Migrationen zu beginnen, anstatt "ensuneu" zu verwenden.If you anticipate using migrations in the future, it's best to just start with Migrations instead of using EnsureCreated.

EnsuredeletedEnsureDeleted

Die ensuredeleted-Methode löscht die Datenbank, wenn Sie vorhanden ist.The EnsureDeleted method will drop the database if it exists. Wenn Sie nicht über die entsprechenden Berechtigungen verfügen, wird eine Ausnahme ausgelöst.If you don't have the appropriate permissions, an exception is thrown.

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

Ensuneu erstelltEnsureCreated

Ensuneu erstellt erstellt die Datenbank, wenn Sie nicht vorhanden ist, und initialisiert das Datenbankschema.EnsureCreated will create the database if it doesn't exist and initialize the database schema. Wenn Tabellen vorhanden sind (einschließlich Tabellen für eine andere dbcontext-Klasse), wird das Schema nicht initialisiert.If any tables exist (including tables for another DbContext class), the schema won't be initialized.

// Create the database if it doesn't exist
dbContext.Database.EnsureCreated();

Tipp

Asynchrone Versionen dieser Methoden sind ebenfalls verfügbar.Async versions of these methods are also available.

SQL-SkriptSQL Script

Um das von ensuneu verwendete SQL zu erhalten, können Sie die generatecreatescript-Methode verwenden.To get the SQL used by EnsureCreated, you can use the GenerateCreateScript method.

var sql = dbContext.Database.GenerateCreateScript();

Mehrere dbcontext-KlassenMultiple DbContext classes

Ensuneu erstellt funktioniert nur, wenn keine Tabellen in der Datenbank vorhanden sind.EnsureCreated only works when no tables are present in the database. Bei Bedarf können Sie eine eigene Überprüfung schreiben, um festzustellen, ob das Schema initialisiert werden muss, und den zugrunde liegenden irelationaldatabasecreator-Dienst verwenden, um das Schema zu initialisieren.If needed, you can write your own check to see if the schema needs to be initialized, and use the underlying IRelationalDatabaseCreator service to initialize the schema.

// TODO: Check whether the schema needs to be initialized

// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();