Créer et supprimer des APICreate and Drop APIs

Les méthodes EnsureCreated et EnsureDeleted fournissent une alternative légère à Migrations pour gérer le schéma de base de données.The EnsureCreated and EnsureDeleted methods provide a lightweight alternative to Migrations for managing the database schema. Ces méthodes sont utiles dans les scénarios lorsque les données sont temporaires et peuvent être supprimées lorsque le schéma est modifié.These methods are useful in scenarios when the data is transient and can be dropped when the schema changes. Par exemple lors d’une création de prototypes, dans les tests, ou pour les caches locaux.For example during prototyping, in tests, or for local caches.

Certains fournisseurs (en particulier ceux non relationnelles) ne prennent pas en charge les Migrations.Some providers (especially non-relational ones) don't support Migrations. Pour ces fournisseurs, EnsureCreated est souvent le moyen le plus simple pour initialiser le schéma de base de données.For these providers, EnsureCreated is often the easiest way to initialize the database schema.

Avertissement

EnsureCreated et Migrations ne fonctionnent pas bien ensemble.EnsureCreated and Migrations don't work well together. Si vous utilisez des Migrations, n’utilisez pas EnsureCreated pour initialiser le schéma.If you're using Migrations, don't use EnsureCreated to initialize the schema.

Transition à partir de EnsureCreated aux Migrations n’est pas une expérience transparente.Transitioning from EnsureCreated to Migrations is not a seamless experience. Pour cela, le plus simple consiste à supprimer la base de données et de créer de nouveau à l’aide des Migrations.The simplest way to do it is to drop the database and re-create it using Migrations. Si vous prévoyez d’utiliser des migrations à l’avenir, il est préférable de simplement commencer avec des Migrations au lieu d’utiliser EnsureCreated.If you anticipate using migrations in the future, it's best to just start with Migrations instead of using EnsureCreated.

EnsureDeletedEnsureDeleted

La méthode EnsureDeleted sera supprimée de la base de données si elle existe.The EnsureDeleted method will drop the database if it exists. Si vous n’avez pas les autorisations appropriées, une exception est levée.If you don't have the appropriate permissions, an exception is thrown.

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

EnsureCreatedEnsureCreated

EnsureCreated crée la base de données si elle n’existe pas et initialiser le schéma de base de données.EnsureCreated will create the database if it doesn't exist and initialize the database schema. Si des tables existent (y compris les tables pour une autre classe DbContext), le schéma ne sont pas initialisé.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();

Conseil

Les versions asynchrones de ces méthodes sont également disponibles.Async versions of these methods are also available.

Script SQLSQL Script

Pour obtenir le SQL utilisé par EnsureCreated, vous pouvez utiliser la méthode GenerateCreateScript.To get the SQL used by EnsureCreated, you can use the GenerateCreateScript method.

var sql = dbContext.Database.GenerateCreateScript();

Plusieurs classes de DbContextMultiple DbContext classes

EnsureCreated fonctionne uniquement lorsque aucune table n’est présent dans la base de données.EnsureCreated only works when no tables are present in the database. Si nécessaire, vous pouvez écrire votre propre vérification pour voir si le schéma doit être initialisé et utiliser le service IRelationalDatabaseCreator sous-jacent pour initialiser le schéma.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();