Entity Framework - Comenzar de nuevo - Deshacer / revertir todas las migraciones


168

Por alguna razón, mis migraciones parecen haber sido mezcladas / corruptas / lo que sea. Estoy en el punto en el que solo quiero comenzar de nuevo, entonces, ¿hay alguna manera de deshacer por completo todas las migraciones, borrar el historial y eliminar el código de migración, así que vuelvo al punto de partida?

por ejemplo) PM> Disable-MigrationsoRollback-Migrations

No quiero "actualizar" a un paso de migración original (es decir, algo así como un InitialSchemaobjetivo) porque ya no puedo encontrarlo.

Respuestas:


358

Puede revertir a cualquier migración utilizando:

Update-Database -TargetMigration:"MigrationName"

Si desea revertir todas las migraciones, puede usar:

Update-Database -TargetMigration:0

o equivalente:

Update-Database -TargetMigration:$InitialDatabase 

En algunos casos, también puede eliminar la base de datos y todas las clases de migración.


77
como siempre, eres el mejor.
drzaus

2
No entiendo, el OP dice específicamente "No quiero" actualizar "a un paso de migración original (es decir, algo así como un objetivo InitialSchema) porque ya no puedo encontrarlo". ¿Cómo hace esta respuesta lo que quiere? Lo que esperaría que sucediera es que estaría en un estado en el que tengo que enable-migrationsvolver a hacerlo . Obviamente, estos son útiles, pero ¿logran lo que pide el OP? (Por favor, no responda con "bueno, él aceptó la respuesta". Estoy tratando de entender esto, no ser inteligente).
Michael Blackburn

@MichaelBlackburn: si desea ejecutar enable-migrationsnuevamente y está desarrollando una base de datos desde cero, solo necesita seguir la última oración: eliminar la base de datos y todo el código relacionado con la migración. Si comenzó a usar migraciones con la base de datos existente, primero debe revertir todas las migraciones utilizando el segundo o tercer comando, luego eliminar la MigrationHistorytabla y todo el código relacionado con la migración. Debería llevarte a la posición inicial. También puede obtener la base de datos inicial desde la copia de seguridad (antes de usar las migraciones) y eliminar todo el código relacionado con la migración.
Ladislav Mrnka

44
@MichaelBlackburn: lo que quise decir es que todas las otras soluciones que he visto le dicen que actualice a su primera migración nombrada , pero mi problema era que no había una migración limpia inicial para actualizar (volver) a - Simplemente quería deshacerse de todas las migraciones, independientemente del método. Por lo tanto, esta respuesta abordó mi preocupación con-TargetMigration:0
drzaus


8

Para ser claros, si usa LocalDb, cuando desee comenzar desde cero, simplemente elimine la base de datos a través del Explorador de bases de datos y luego escriba enable-migrations -forcela Consola del Administrador de paquetes. No elimine la base de datos a través de la carpeta App_Data o tendrá el siguiente problema .


2
¡Tenga cuidado al hacer esto, ya que sobrescribirá sus Migrations \ Configuration.cs sin previo aviso!
cgatian 01 de

Gracias por la advertencia, casi dejé caer el código de la primera manera después de un tiempo, es bueno tener todo su código en una sola vez, colocarlo, tener versiones de control de fuente para su base de datos per se pero no vi ningún otro gran beneficio y volvió a la base de datos primero. Uso Red Gate Sql Compare para rastrear todos los deltas.
Brian Ogden


0

Está escrito incorrectamente en su documentación, supongo, para mí solía

Update-Database -Target MigrationName
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.