[C#] EF Core를 사용하여 ASP.NET Core에서 마이그레이션을 적용 취소하는 방법

PM> Remove-Migration -context BloggingContextEF Core를 사용하여 ASP.NET Core 프로젝트로 VS2015에서 실행할 때 다음 오류가 발생합니다.

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.

어떻게 적용을 취소 할 수 있습니까? ASP.NET Core 1.0, EF Core 및 VS2015 Update 3의 최신 릴리스를 사용하고 있습니다.



답변

사용하다:

CLI

> dotnet ef database update <previous-migration-name>

패키지 관리자 콘솔

PM> Update-Database <previous-migration-name>

예:

PM> Update-Database MyInitialMigration

그런 다음 마지막 마이그레이션을 제거하십시오.

데이터베이스에 변경 사항을 적용했기 때문에 데이터베이스 업데이트없이 마이그레이션을 제거 할 수 없습니다.

PMC를 사용하는 경우 시도 : PM> update-database 0 데이터베이스를 지우고 솔루션에서 마이그레이션 스냅 샷을 제거 할 수 있습니다.


답변

모든 마이그레이션을 완전히 제거하고 다시 시작하려면 다음을 수행하십시오.

dotnet ef database update 0
dotnet ef migrations remove


답변

여전히 Update-Database명령을 사용할 수 있습니다 .

Update-Database -Migration <migration name> -Context <context name>

그러나 마이그레이션 이름으로 판단하면 명령이 작동하지 않을 수있는 첫 번째 마이그레이션이라고 가정합니다. __MigrationHistory데이터베이스 의 테이블에서 항목을 삭제 한 후 Remove-Migration명령을 다시 실행할 수 있어야 합니다. 마이그레이션 파일을 삭제하고 다시 시작할 수도 있습니다.


답변

특정 마이그레이션을 적용하지 않으려면 다음을 수행하십시오.

dotnet ef database update LastGoodMigrationName
or
PM> Update-Database -Migration LastGoodMigrationName

모든 마이그레이션을 적용 취소하려면 :

dotnet ef database update 0
or
PM> Update-Database -Migration 0

마지막 마이그레이션을 제거하려면

dotnet ef migrations remove
or
PM> Remove-Migration

모든 마이그레이션을 제거하려면

Migrations폴더를 제거하십시오 .

마지막 몇 가지 마이그레이션을 모두 제거하려면 (모두는 아님) :

이 마이그레이션의 무리를 제거하는 명령은 없으며 우리는 단지이 몇 제거 할 수 없습니다 migrations자신의 *.designer.cs우리가 일관성있는 상태에서 스냅 샷 파일을 계속해야하기 때문에 파일을. 마이그레이션을 하나씩 제거해야합니다 ( To remove last migration위 참조 ).

마지막 마이그레이션을 적용하고 제거하려면

dotnet ef migrations remove --force
or
PM> Remove-Migration -Force


답변

마지막으로 적용된 마이그레이션을 되돌리려면 다음을 수행해야합니다 (패키지 관리자 콘솔 명령).

  1. 데이터베이스에서 마이그레이션을 되 돌리십시오. PM> Update-Database <prior-migration-name>
  2. 프로젝트에서 마이그레이션 파일을 제거하십시오 (또는 다음 단계에서 다시 적용됨).
  3. 모델 스냅 샷 업데이트 : PM> Remove-Migration

UPD : 최신 버전의 Visual Studio (2017)에는 두 번째 단계가 필요하지 않은 것 같습니다.


답변

가치별로 마이그레이션을 타겟팅 할 수 있습니다.

 Update-Database -Migration:0

그런 다음 제거하십시오

 Remove-Migration


답변

데이터베이스에 이미 적용된 후 가장 최근의 마이그레이션을 “적용하지 않으려면”:

  1. SQL Server 개체 탐색기를 엽니 다 (보기-> “SQL Server 개체 탐색기”).
  2. 작은 삼각형을 옆으로 확장하여 프로젝트에 연결된 데이터베이스로 이동하십시오.
  3. “테이블”펼치기
  4. “dbo._EFMigrationsHistory”라는 테이블을 찾으십시오.
  5. 마우스 오른쪽 단추로 클릭하고 “데이터보기”를 선택하여 Visual Studio에서 테이블 항목을보십시오.
  6. 적용을 취소하려는 마이그레이션에 해당하는 행을 삭제하십시오 (프롬프트가 표시되면 “예”라고 경고하십시오).
  7. project.json 파일이있는 디렉토리의 명령 창에서 “dotnet ef migrations remove”를 다시 실행하십시오. 또는 패키지 관리자 콘솔에서 “마이그레이션 제거”명령을 실행하십시오.

이것이 도움이되고 프로젝트의 모든 마이그레이션에 적용되기를 바랍니다 … 나는 가장 최근의 마이그레이션으로 만 테스트했습니다 …

행복한 코딩!