Criar e remover APIsCreate and Drop APIs

Os métodos EnsureCreated e EnsureDeleted fornecem uma alternativa leve para migrações para gerenciar o esquema de banco de dados.The EnsureCreated and EnsureDeleted methods provide a lightweight alternative to Migrations for managing the database schema. Esses métodos são úteis em cenários quando os dados são transitórios e podem ser descartados quando o esquema é alterado.These methods are useful in scenarios when the data is transient and can be dropped when the schema changes. Por exemplo durante a criação de protótipos, testes ou para caches locais.For example during prototyping, in tests, or for local caches.

Alguns provedores (especialmente os não-relacional) não dão suporte a migrações.Some providers (especially non-relational ones) don't support Migrations. Para esses provedores, EnsureCreated costuma ser a maneira mais fácil para inicializar o esquema de banco de dados.For these providers, EnsureCreated is often the easiest way to initialize the database schema.

Aviso

Migrações e EnsureCreated não funcionam bem juntos.EnsureCreated and Migrations don't work well together. Se você estiver usando as migrações, não use EnsureCreated para inicializar o esquema.If you're using Migrations, don't use EnsureCreated to initialize the schema.

A transição de EnsureCreated para migrações não é uma experiência perfeita.Transitioning from EnsureCreated to Migrations is not a seamless experience. A maneira mais simples de fazê-lo é remover o banco de dados e recriá-lo usando as migrações.The simplest way to do it is to drop the database and re-create it using Migrations. Se você antecipar o uso de migrações no futuro, é melhor começar com as migrações em vez de usar EnsureCreated.If you anticipate using migrations in the future, it's best to just start with Migrations instead of using EnsureCreated.

EnsureDeletedEnsureDeleted

O método EnsureDeleted descartará o banco de dados se ele existir.The EnsureDeleted method will drop the database if it exists. Se você não tiver as permissões apropriadas, uma exceção é lançada.If you don't have the appropriate permissions, an exception is thrown.

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

EnsureCreatedEnsureCreated

EnsureCreated criará o banco de dados se ele não existe e inicializar o esquema de banco de dados.EnsureCreated will create the database if it doesn't exist and initialize the database schema. Se existirem quaisquer tabelas (incluindo tabelas para outra classe DbContext), o esquema não ser inicializado.If any tables exist (including tables for another DbContext class), the schema won't be initialized.

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

Dica

Versões assíncronas desses métodos também estão disponíveis.Async versions of these methods are also available.

Script SQLSQL Script

Para obter o SQL usado pelo EnsureCreated, você pode usar o método GenerateCreateScript.To get the SQL used by EnsureCreated, you can use the GenerateCreateScript method.

var sql = dbContext.Database.GenerateCreateScript();

Várias classes DbContextMultiple DbContext classes

EnsureCreated só funciona quando não há tabelas estão presentes no banco de dados.EnsureCreated only works when no tables are present in the database. 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.If needed, you can write your own check to see if the schema needs to be initialized, and use the underlying IRelationalDatabaseCreator service to initialize the schema.

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

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