Partager via


Créer et supprimer des API

Les méthodes EnsureCreated() et EnsureDeleted() 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 Migrations. Pour ces fournisseurs, EnsureCreated est souvent le moyen le plus simple d’initialiser le schéma de base de données.

Avertissement

EnsureCreated et Migrations ne fonctionnent pas bien ensemble. Si vous utilisez Migrations, n’utilisez pas EnsureCreated pour initialiser le schéma.

La transition de EnsureCreated à Migrations n’est pas une expérience fluide. 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 EnsureCreated.

EnsureDeleted

La méthode EnsureDeleted supprime 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
dbContext.Database.EnsureDeleted();

EnsureCreated

EnsureCreated crée la base de données si elle n’existe pas et initialise le schéma de la base de données. Si des tables existent (y compris des tables pour une autre classe DbContext), le schéma ne sera pas initialisé.

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

Conseil

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

Script SQL

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

var sql = dbContext.Database.GenerateCreateScript();

Classes DbContext multiples

EnsureCreated ne fonctionne que si 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();