Compartir a través de


Creación y eliminación de API

Los métodos EnsureCreatedAsync y EnsureDeletedAsync proporcionan una alternativa ligera a Migrations 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, EnsureCreatedAsync suele ser la manera más fácil de inicializar el esquema de la base de datos.

Advertencia

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

La transición de EnsureCreatedAsync a Migraciones no es una experiencia sin contratiempos. 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 EnsureCreatedAsync.

EnsureDeletedAsync

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

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

EnsureCreatedAsync

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

Sugerencia

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

SQL Script

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

var sql = dbContext.Database.GenerateCreateScript();

Varias clases de DbContext

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