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