Programming

EF 마이그레이션 : 마지막으로 적용된 마이그레이션을 롤백 하시겠습니까?

procodes 2020. 2. 21. 22:33
반응형

EF 마이그레이션 : 마지막으로 적용된 마이그레이션을 롤백 하시겠습니까?


이것은 일반적인 작업처럼 보이지만 쉬운 방법을 찾을 수 없습니다.

마지막으로 적용된 마이그레이션을 취소하고 싶습니다. 나는 다음과 같은 간단한 명령을 기대했을 것이다.

PM> Update-Database -TargetMigration:"-1"

대신, 내가 생각해 낼 수있는 것은 :

PM> Get-Migrations

Retrieving migrations that have been applied to the target database.
201208012131302_Add-SystemCategory
201207311827468_CategoryIdIsLong
201207232247409_AutomaticMigration
201207211340509_AutomaticMigration
201207200025294_InitialCreate

PM> Update-Database -TargetMigration:"CategoryIdIsLong"

(적어도 타임 스탬프를 건너 뛰고 이름 만 사용할 수 있습니다 ...)

더 쉬운 방법이 있습니까?


EF 5.0부터는 사용자가 설명하는 방식이 선호되는 방식입니다. 한 가지 해결책은 위의 단계를 자동화하는 랩퍼 PS 스크립트를 작성하는 것입니다. 또한이 기능에 대한 기능 요청을 작성하거나 더 나은 기능을 구현할 수 있습니다. http://entityframework.codeplex.com/


이 스레드에 설명을 추가하고 싶습니다.

Update-Database -TargetMigration:"name_of_migration"

위의 작업은 지정된 마이그레이션이 남아있을 때까지 모든 마이그레이션을 롤백하려는 것입니다. 따라서 GET-MIGRATIONS를 사용하고 A, B, C, D 및 E가있는 경우이 명령을 사용하면 E 및 D를 롤백하여 C로 이동합니다.

Update-Database -TargetMigration:"C"

또한 누군가가 반대 의견을 말할 수 없다면 서수 값과 짧은 -Target 스위치를 사용할 수 있음을 알았습니다 (따라서 -Target은 -TargetMigration과 같습니다). 모든 마이그레이션을 롤백하고 다시 시작하려면 다음을 사용할 수 있습니다.

update-database -target:0

위의 0은 첫 번째 마이그레이션조차 롤백합니다 ( 이 명령은 파괴적인 명령입니다-사용하기 전에 수행중인 작업을 알고 있어야합니다! )-위의 구문을 사용하여 이름을 요구하는 경우 수행 할 수없는 것 대상 마이그레이션 (마이그레이션이 적용되기 전에 0 번째 마이그레이션 이름이 존재하지 않습니다!). 따라서이 경우 0 (기본) 값을 사용해야합니다. 마찬가지로 마이그레이션 A, B, C, D 및 E (순서대로)를 적용한 경우 서수 1은 A를, 서수 2는 B를 참조해야합니다. 따라서 B로 롤백하려면 다음 중 하나를 사용할 수 있습니다.

Update-Database -TargetMigration:"B"

또는

Update-Database -TargetMigration:2

2019 년 1 월 수정 :

비슷한 질문에 대한 이 관련 답변따르면 올바른 매개 변수 이름은 -Target(EF Core 1.1의 경우) 또는 -Migration(EF Core 2.0의 경우)입니다


에서 EntityFrameworkCore :

Update-Database 20161012160749_AddedOrderToCourse

여기서 20161012160749_AddedOrderToCourse롤백하려는 마이그레이션 이름입니다.


해결책은 다음과 같습니다.

Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess

추가 알림 :

구성 유형이 여러 개인 경우 [ConfigurationName]을 지정해야합니다.

Update-Database -Configurationtypename [ConfigurationName] -TargetMigration [MigrationName]

update-database 0

This will roll back all migrations in EFCore

EF Core에서는 Remove-Migration잘못된 마이그레이션을 추가 한 후 패키지 관리자 콘솔에서 명령 입력 할 수 있습니다 .

마이그레이션시 데이터 손실이 발생할 수있는 경우 콘솔에서 제안합니다.

작업이 발판되어 데이터가 손실 될 수 있습니다. 마이그레이션이 정확한지 검토하십시오. 이 작업을 실행 취소하려면 마이그레이션 제거를 사용하십시오.


Update-Database –TargetMigration:"Your migration name"

이 문제에 대해서는 다음 링크를 제안합니다.

https://elegantcode.com/2012/04/12/entity-framework-migrations-tips/


내가 사용하고 EntityFrameworkCore을 나는 @MaciejLisCK으로 대답을 사용합니다. 여러 DB 컨텍스트가있는 경우 컨텍스트 매개 변수를 추가하여 컨텍스트를 지정해야합니다. 예 :

Update-Database 201207211340509_MyMigration -context myDBcontext

( 201207211340509_MyMigration롤백하려는 마이그레이션은 어디에 있으며 myDBcontextDB 컨텍스트의 이름입니다)

참고 URL : https://stackoverflow.com/questions/11904571/ef-migrations-rollback-last-applied-migration



반응형