Compartilhar via


Criar e excluir APIs

Os métodos EnsureCreatedAsync e EnsureDeletedAsync oferecem uma alternativa leve às Migrações 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 criação de protótipos, em testes ou para caches locais.

Alguns provedores (especialmente os não relacionais) não dão suporte a Migrações. Para esses provedores, EnsureCreatedAsync geralmente é a maneira mais fácil de inicializar o esquema de banco de dados.

Aviso

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 EnsureCreatedAsync para Migrações não é uma experiência perfeita. A maneira mais simples de fazer isso é remover o banco de dados e criá-lo novamente usando Migrações. Se você pretende usar Migrações no futuro, é melhor começar apenas com Migrações em vez de usar EnsureCreatedAsync.

EnsureDeletedAsync

O método EnsureDeletedAsync removerá o banco de dados se ele existir. Se você não tiver as permissões apropriadas, uma exceção será gerada.

// 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 de banco de dados. Se houver 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();