먼저 EF 코드와 .net 코어를 사용하여 마이그레이션 스크립트를 생성 할 수 있습니까?


83

.Net Core로 MVC 애플리케이션을 구축 중이며 마이그레이션 스크립트를 생성해야합니다.

EF6을 사용하여 명령을 실행했습니다.

update-database -script

하지만 .net Core에서 똑같이하려고 할 때 다음 예외가 발생합니다.

Update-Database : 매개 변수 이름 'script'와 일치하는 매개 변수를 찾을 수 없습니다.

EF Core에 상응하는 것이 있는지 알고 있습니까?

답변:


123

EF 문서에 따라 Script-Migration명령 을 사용할 수 있습니다 .

모든 마이그레이션을 스크립트로 작성하려면 패키지 관리자 콘솔에서 간단히 호출 할 수 있습니다. 마지막 마이그레이션의 변경 사항을 스크립팅하려면 다음과 같이 호출 할 수 있습니다.

Script-Migration -From <PreviousMigration> -To <LastMigration>

문서를 확인하십시오. 명령에 대한 몇 가지 옵션이 더 있습니다.


1
스크립트 마이그레이션 도구는 다운 그레이드에 대해 작동하지 않는 것 같습니다 (To 마이그레이션이 From 마이그레이션보다 오래된 경우). '실행 취소'스크립트를 생성하는 방법에 대한 아이디어가 있습니까?
Nullius

1
@Nullius 당신은 전화, 아니면 그냥 최신 스크립트 코드에 취소를 만든 다음 DB를 업데이트하고 얻을 필요가 자사에 "undoScript"...처럼보고 싶지 않아
Haithem KAROUI

1
DB 마이그레이션도 관리하는 배포 서버가 있습니다. 예 : 배포가 롤백되면 데이터베이스도 이전 상태로 다운 그레이드되어야합니다. db 마이그레이션을 관리하는 빌드 단계에는 'up'및 'down'스크립트가 필요합니다. 스크립트 마이그레이션은 From 마이그레이션보다 이전 To 마이그레이션을 지정할 때도 작동한다는 것을 발견했습니다. 그러나 To migration을 실제로 마이그레이션하려는 마이그레이션 이전으로 설정해야합니다. 또한 최신 마이그레이션을 위해 '다운'스크립트를 생성하려는 경우 From 마이그레이션 매개 변수에 'ZZZZZZ'(또는 이와 유사한)를 사용해야합니다.
Nullius

2
첫 번째 마이그레이션을 위한 스크립트를 생성하려는 경우 어떻게해야합니까 ? PreviousMigration
tchelidze

2
@tchelidze 초기 마이그레이션을 스크립팅하려면 -From 매개 변수를 0으로 설정합니다. 예 : Script-Migration
-From

20

dotnet core cli를 사용하여 스크립트를 생성 할 수 있습니다.

dotnet ef migrations script 

또한 새로운 power shell out-file명령으로 이것을 파일에 넣을 수 있습니다 .

dotnet ef migrations script | out-file ./script.sql

1
좋은 팁 또는 CMD :
dotnet

11
dotnet ef migrations script --help

Usage: dotnet ef migrations script [arguments] [options]

Arguments:
  <FROM>  The starting migration. Defaults to '0' (the initial database).
  <TO>    The ending migration. Defaults to the last migration.

Options:
  -o|--output <FILE>                     The file to write the result to.
  -i|--idempotent                        Generate a script that can be used on a database at any migration.
  -c|--context <DBCONTEXT>               The DbContext to use.
  -p|--project <PROJECT>                 The project to use.
  -s|--startup-project <PROJECT>         The startup project to use.
  --framework <FRAMEWORK>                The target framework.
  --configuration <CONFIGURATION>        The configuration to use.
  --runtime <RUNTIME_IDENTIFIER>         The runtime to use.
  --msbuildprojectextensionspath <PATH>  The MSBuild project extensions path. Defaults to "obj".
  --no-build                             Don't build the project. Only use this when the build is up-to-date.
  -h|--help                              Show help information
  -v|--verbose                           Show verbose output.
  --no-color                             Don't colorize output.
  --prefix-output                        Prefix output with level.

그래서, 당신은 시도 할 수 있습니다

dotnet ef migrations script ver1 ver2
dotnet ef migrations script ver1 ver2 -o ./script.sql

이것은 .Net Core 2.1에서 작동합니다.


10

매개 변수를 Script-Migration으로 되돌려 마이그레이션을 롤백하는 스크립트를 생성 할 수도 있습니다. 예를 들어, BadLatestMigration 및 GoodPreviousMigration의 두 마이그레이션이있는 경우 다음 명령을 사용하여 GoodPreviousMigration으로 되돌릴 수 있습니다.

Script-Migration BadLatestMigration GoodPreviousMigration 

나중에 Remove-Migration을 확인하여 잘못된 마이그레이션을 제거하십시오.

Remove-Migration

이것은 .Net Core 2.2.0에서 작동합니다.


나는 롤백을 찾고 있었고 이것이 나를 위해 해결했습니다. 3.0 EF 코어에서 작동
Sehab

5

이것은 또한 SQL 만 생성합니다.

Update-Database -script -TargetMigration TO -SourceMigration FROM

6
이 EF5 마찬가지입니다, 나는 그것이 EF6 또는 EF 코어에서 작동 것이라고 생각하지 않는다
Yuval 교수 페렐만
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.