Archivo de la etiqueta: codefirst

Code First – Resetear Entity Framework Migrations

Si trabajas con Code First, Entity Framework y Migrations es posible que a medida que avanzas en el proyecto llegues a un estado inconsistente de la base de datos cuando intentas actualizarla con el comando update-database.

Lo ideal es solucionarlo con las opciones que te puede ofrecer codefirst, pero si aún así llegas a un punto que creas necesario resetear las migraciones lo que deberás hacer es lo siguiente:

1. – Borrar el directorio Migrations de tu proyecto.
2. – Borrar la tabla _MigrationsHistory de tu base de datos.
3. – Ejecutar el siguiente comando en la consola de administración de paquetes.

Enable-Migrations -EnableAutomaticMigrations -Force

4. – Finalmente ejecutar:

Add-Migration Initial

Todo este proceso hace que se cree un nuevo archivo Initial.cs en la carpeta de Migrations. En él podrás ver (como siempre que realizas una migración) los métodos Up() y Down() que permiten la aplicación de la migración o el regreso al estado anterior.

En este punto antes de utilizar el comando update-database deberás tener en cuenta si quieres borrar la base de datos y partir con la base de datos vacía o aprovechar los datos que ya tenías previamente.

A) Si deseas partir con una base de datos vacía será tan sencillo como borrar todas las tablas de la base de datos y ejecutar update-database.
B) Si quieres aprovechar los datos deberás profundizar en el método Up() de la migración creada y ver que tablas quieres que se regeneren. Previamente a ejecutar update-database deberás borrar las tablas que te interesan resetear en tu base de datos y comentar las líneas de código que crean las tablas que deseas conservar en el método Up(). Una vez realizadas estas dos comprobaciones podrás utilizar el comando update-database.

Espero que este artículo te haya servido de ayuda para Resetear Entity Framework Migrations.

Múltiples columnas de identidad especificadas

Si utilizas programación CodeFirst en tu proyecto .Net es posible que al realizar una modificación en el nombre de la columna que guarda la clave de una tabla/clase/DbSet aparezca el siguiente error al utilizar update-database con alguna migración pendiente.

Multiple identity columns specified for table ‘nombre_tabla’. Only one identity column per table is allowed.

Este error indica que existen múltiples columnas de identidad especificadas, es decir, codefirst entiende que existe más de una columna clave de la tabla.

Para solucionar este problema y hacer que la migración funcione deberás reordenar la lista de operaciones en el script de migración pendiente. Deberás ubicar las operaciones de borrado (drop) primero y luego añadir la columna con la nueva clave.

public partial class RenameKey : DbMigration
{
    public override void Up()
    {
        DropPrimaryKey("dbo.nombre_tabla", new[] { "OldId" });
        DropColumn("dbo.nombre_tabla", "OldId");
        AddColumn("dbo.nombre_tabla", "Id", c => c.Int(nullable: false, identity: true));
        AddPrimaryKey("dbo.GameSummary", "Id");
    }