La migración de Entity Framework 7 no crea tablas

asp.net-core c# entity-framework-core

Pregunta

Estoy trabajando con mi primer proyecto utilizando Entity Framework 7 y me estoy conectando a un servidor SQL donde la base de datos ya está creada pero todavía no hay tablas. He creado mi DbContext y una clase, luego establezco un DbSet<> dentro de mi contexto. Ejecuté los comandos para habilitar las migraciones y crear la primera migración, luego ejecuté el comando para actualizar la base de datos. Todo parecía funcionar bien, no surgieron errores, pero cuando miro la base de datos, solo se creó la tabla EFMigraitonsHistory . Cuando veo la clase que se creó para la migración inicial, está esencialmente en blanco. ¿Qué estoy haciendo mal?

Comandos que estoy ejecutando:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

Contexto:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

Clase de mesa:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

Startup.cs:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

Clase para la migración inicial (autogenerada por EF):

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

Editar: Después de hacer lo que Poke ha sugerido, esta es mi nueva migración autogenerada. Sin embargo, la tabla aún no se está creando en el nivel de la base de datos.

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

Respuesta aceptada

Primero debe configurar la entidad en el contexto de su base de datos. Como mínimo, deberías hacer esto:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

El problema con sus migraciones estaba un poco oculto en el diseño de su proyecto. Entonces, lo que tienes es un proyecto JobSight.DAL que contiene las entidades y el contexto de la base de datos. Y luego tienes un proyecto JobSight.WebUI que es el proyecto ASP real que contiene Startup.cs con la configuración de la base de datos.

Esto está causando problemas porque, de manera predeterminada, EF simplemente asumirá que encontrará todo en el ensamblaje actual. Entonces, si está ejecutando el comando ef desde su proyecto web, creará las migraciones allí incluso si el contexto está en otro proyecto. Pero cuando intenta aplicar la migración, EF no la encontrará ya que solo se verá en el proyecto del contexto.

Entonces, para solucionar este problema, debe crear las migraciones en el proyecto DAL . Puede hacerlo especificando el proyecto cuando llame al comando ef :

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

Puede verificar que esto funcionó ejecutando la dnx ef migrations list posteriormente. Esto ahora debería devolver la migración de Example ; anteriormente, ese comando no devolvió nada: no se pudo encontrar una migración, por lo que el comando de update solo dijo Done (sin aplicar la migración) y la base de datos no se creó. Entonces, si ahora obtiene la migración allí, puede aplicarla usando:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

Tenga en cuenta que, dado que la migración ahora se crea en el proyecto DAL, debe agregar una referencia a EntityFramework.MicrosoftSqlServer allí, de lo contrario el proyecto no se compilará. Debe hacerlo antes de poder ejecutar el comando de list anterior.

Finalmente, para más información sobre esto, vea este problema .


Respuesta popular

Aunque esta no es la respuesta a la pregunta original, publico mi respuesta aquí porque podría ayudar a alguien que tenga un problema similar. Mi problema también fue que las tablas no se crearon, pero las dotnet ef migrations add InitialCreate creó 3 archivos .cs en la carpeta Migrations . Pero la dotnet ef database update solo creó la tabla MigrationsHistory y la dotnet ef migrations list no devolvió ninguna migración.

Resultó que el problema era que la carpeta Migraciones estaba excluida del proyecto de Visual Studio. Una vez que lo volví a incluir, todo funcionó bien.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué