Criar e soltar APIs
Os métodos EnsureCreatedAsync e EnsureDeletedAsync fornecem uma alternativa leve ao Migrations para gerenciar o esquema de banco de dados. Esses métodos são úteis em cenários em que os dados são transitórios e podem ser descartados quando o esquema é alterado. Por exemplo, durante a prototipagem, em testes ou para caches locais.
Alguns provedores (especialmente os não relacionais) não oferecem suporte a migrações. Para esses provedores, EnsureCreatedAsync
geralmente é a maneira mais fácil de inicializar o esquema de banco de dados.
Advertência
EnsureCreatedAsync
e Migrações não funcionam bem juntas. Se você estiver usando Migrações, não use EnsureCreatedAsync
para inicializar o esquema.
A transição de EnsureCreatedAsync
para Migrações não é uma experiência sem sobressaltos. A maneira mais simples de fazer isso é descartar o banco de dados e recriá-lo usando Migrações. Se você prevê usar migrações no futuro, é melhor começar com Migrações em vez de usar EnsureCreatedAsync
.
EnsureDeletedAsync
O método EnsureDeletedAsync
descartará o banco de dados, se ele existir. Se você não tiver as permissões apropriadas, uma exceção será lançada.
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
EnsureCreatedAsync
EnsureCreatedAsync
criará o banco de dados se ele não existir e inicializará o esquema do banco de dados. Se existirem tabelas (incluindo tabelas para outra classe DbContext
), o esquema não será inicializado.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
Dica
Versões assíncronas desses métodos também estão disponíveis.
SQL Script
Para obter o SQL usado por EnsureCreatedAsync
, você pode usar o método GenerateCreateScript.
var sql = dbContext.Database.GenerateCreateScript();
Várias classes DbContext
EnsureCreated só funciona quando nenhuma tabela está presente no banco de dados. Se necessário, você pode escrever sua própria verificação para ver se o esquema precisa ser inicializado e usar o serviço IRelationalDatabaseCreator subjacente para inicializar o esquema.
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();