c# - net - remove migration entity framework core
Cómo no aplicar una migración en ASP.NET Core con EF Core (13)
Cuando ejecuto
PM> Remove-Migration -context BloggingContext
en VS2015 con un proyecto ASP.NET Core con EF Core, obtengo el siguiente error:
System.InvalidOperationException: The migration ''20160703192724_MyFirstMigration'' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration. at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force)
at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.RemoveMigration(String contextType, Boolean force)
at Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsRemoveCommand.<>c__DisplayClass0_0.<Configure>b__0()
at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args)
The migration ''20160703192724_MyFirstMigration'' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.
¿Cómo puedo no aplicarlo? Estoy usando la última versión de ASP.NET Core 1.0, EF Core y VS2015 Update 3.
Debe eliminar el registro de migración ''20160703192724_MyFirstMigration'' de la tabla ''_EFMigrationsHistory''.
De lo contrario, este comando eliminará la migración y eliminará la carpeta de migraciones:
> remove-migration -force
1.Busque la tabla "dbo._EFMigrationsHistory", luego elimine el registro de migración que desea eliminar. 2. ejecute "remove-migration" en PM (Package Manager Console). Funciona para mi.
En general, si está utilizando la consola de Package Manager, la forma correcta de eliminar una migración específica es haciendo referencia al nombre de la migración
Update-Database -Migration {Name of Migration} -Context {context}
Otra forma de eliminar la última migración que ha aplicado según los docs es mediante el comando:
dotnet ef migrations remove
Este comando debe ejecutarse desde el símbolo del sistema del desarrollador ( cómo abrir el símbolo del sistema ) dentro del directorio de la solución.
Por ejemplo, si su aplicación está dentro del nombre "Aplicación" y está en la carpeta c: / Proyectos. Entonces tu camino debería ser:
C:/Projects/Application
En la consola de Package Manager:
Update-Database Your_Migration_You_Want_To_Revert_To
Puede ver más opciones y explicaciones sobre cómo revertir las migraciones aquí
Para "no aplicar" la migración más reciente (¿reciente?) Después de que ya se haya aplicado a la base de datos:
- Abra el Explorador de objetos de SQL Server (Ver -> "Explorador de objetos de SQL Server")
- Navegue a la base de datos que está vinculada a su proyecto expandiendo los triángulos pequeños a un lado.
- Expandir "Tablas"
- Busque la tabla llamada "dbo._EFMigrationsHistory".
- Haga clic derecho sobre él y seleccione "Ver datos" para ver las entradas de la tabla en Visual Studio.
- Elimine la fila correspondiente a su migración que no desea aplicar (diga "sí" a la advertencia, si se le solicita).
- Ejecute "dotnet ef migrations remove" nuevamente en la ventana de comandos en el directorio que tiene el archivo project.json. Alternativamente, ejecute el comando "Remove-Migration" en la consola del administrador de paquetes.
Espero que esto ayude y sea aplicable a cualquier migración en el proyecto ... Probé esto solo con la migración más reciente ...
¡Feliz codificación!
Para eliminar por completo todas las migraciones y comenzar de nuevo, haga lo siguiente:
dotnet ef database update 0
dotnet ef migrations remove
Para no aplicar una migración en EF Core 1.0, use el comando:
actualización de la base de datos de dotnet ef {Migration_name}
Use el nombre de la migración hasta la que desea conservar sus cambios. La lista de nombres de la migración se puede encontrar usando:
lista de migraciones de dotnet ef
Para revertir la última migración aplicada, debe (comandos de la consola del administrador de paquetes):
-
Revertir la migración de la base de datos:
PM> Update-Database <prior-migration-name>
- Elimine el archivo de migración del proyecto (o se volverá a aplicar en el siguiente paso)
-
Actualice la instantánea del modelo:
PM> Remove-Migration
UPD : el segundo paso parece no ser necesario en las últimas versiones de Visual Studio (2017).
Simplemente puede orientar una migración por valor
Update-Database -Migration:0
Luego ve y quítalo
Remove-Migration
Todavía puede usar el comando
Update-Database
.
Update-Database -Migration <migration name> -Context <context name>
Sin embargo, a juzgar por el nombre de su migración, supongo que es la primera migración, por lo que ese comando puede no funcionar.
Debería poder eliminar la entrada de la tabla
__MigrationHistory
en su base de datos y luego ejecutar el comando
Remove-Migration
nuevamente.
También puede eliminar el archivo de migración y comenzar de nuevo.
Utilizar:
CLI
> dotnet ef database update <previous-migration-name>
Consola de administrador de paquetes
PM> Update-Database <previous-migration-name>
Ejemplo:
PM> Update-Database MyInitialMigration
Luego intente eliminar la última migración.
Eliminar la migración sin actualizar la base de datos no funciona porque aplicó cambios a la base de datos.
Si usa PMC, intente: PM> update-database 0 Esto borrará la base de datos y le permitirá eliminar la instantánea de migración de su solución
Para no aplicar una migración específica (s) :
dotnet ef database update <previous-migration-name>
or
PM> Update-Database -Migration <previous-migration-name>
Para no aplicar todas las migraciones :
dotnet ef database update 0
or
PM> Update-Database -Migration 0
Para eliminar la última migración:
dotnet ef migrations remove
or
PM> Remove-Migration
Para no aplicar y eliminar la última migración:
dotnet ef migrations remove --force
or
PM> Remove-Migration -Force
var context = serviceProvider.GetRequiredService<ApplicationDbContext>();
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var roleManaget = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
await context.Database.EnsureDeletedAsync();