Partager via


Créer et supprimer des API

Les méthodes EnsureCreatedAsync et EnsureDeletedAsync offrent une alternative légère à Migrations pour la gestion du schéma de base de données. Ces méthodes sont utiles dans les scénarios où les données sont temporaires et peuvent être supprimées lorsque le schéma change. Par exemple, lors du prototypage, dans les tests ou pour les caches locaux.

Certains fournisseurs (en particulier les fournisseurs non relationnels) ne prennent pas en charge les migrations. Pour ces fournisseurs, EnsureCreatedAsync est souvent le moyen le plus simple d’initialiser le schéma de base de données.

Avertissement

EnsureCreatedAsync et migrations ne fonctionnent pas correctement ensemble. Si vous utilisez migrations, n’utilisez pas EnsureCreatedAsync pour initialiser le schéma.

La transition de EnsureCreatedAsync aux migrations n’est pas une expérience transparente. La méthode la plus simple consiste à supprimer la base de données et à la recréer à l’aide de Migrations. Si vous prévoyez d’utiliser des migrations à l’avenir, il est préférable de commencer simplement avec Migrations au lieu d’utiliser EnsureCreatedAsync.

EnsureDeletedAsync

La méthode EnsureDeletedAsync supprimera la base de données si elle existe. Si vous n’avez pas les autorisations appropriées, une exception est levée.

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

EnsureCreatedAsync

EnsureCreatedAsync crée la base de données s’il n’existe pas et initialise le schéma de base de données. Si des tables existent (y compris des tables pour une autre classe DbContext), le schéma n’est pas initialisé.

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

Conseil

Les versions asynchrones de ces méthodes sont également disponibles.

SQL Script

Pour obtenir le code SQL utilisé par EnsureCreatedAsync, vous pouvez utiliser la méthode GenerateCreateScript.

var sql = dbContext.Database.GenerateCreateScript();

Classes DbContext multiples

EnsureCreated fonctionne uniquement quand aucune table n’est présente dans la base de données. 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.

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

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