Crear y quitar API

Los métodos EnsureCreated() y EnsureDeleted() proporcionan una alternativa ligera a migraciones para administrar el esquema de la base de datos. Estos métodos son útiles en escenarios en los que los datos son transitorios y se pueden quitar cuando cambia el esquema. Por ejemplo, durante la creación de prototipos, en pruebas o en cachés locales.

Algunos proveedores (especialmente los no relacionales) no admiten Migraciones. Para estos proveedores, EnsureCreated a menudo es la manera más fácil de inicializar el esquema de la base de datos.

Advertencia

EnsureCreated y las migraciones no funcionan bien juntas. Si usa Migraciones, no use EnsureCreated para inicializar el esquema.

La transición de EnsureCreated a Migraciones no es una experiencia fluida. La manera más sencilla de hacerlo es quitar la base de datos y volver a crearla mediante Migraciones. Si prevé usar migraciones en el futuro, es mejor empezar con Migraciones en lugar de usar EnsureCreated.

EnsureDeleted

El método EnsureDeleted quitará la base de datos si existe. Si no tiene los permisos adecuados, se produce una excepción.

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

EnsureCreated

EnsureCreated creará la base de datos si no existe e inicializará el esquema de la base de datos. Si existen tablas (incluidas tablas para otra clase DbContext), el esquema no se inicializará.

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

Sugerencia

También hay disponibles versiones asincrónicas de estos métodos.

Secuencia de comandos de SQL

Para obtener el código SQL usado por EnsureCreated, puede usar el método GenerateCreateScript.

var sql = dbContext.Database.GenerateCreateScript();

Clases DbContext múltiples

EnsureCreated solo funciona cuando no hay tablas presentes en la base de datos. Si es necesario, puede escribir su propia comprobación para ver si es necesario inicializar el esquema y usar el servicio IRelationalDatabaseCreator subyacente para inicializar el esquema.

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

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