데이터베이스를 수동으로 업데이트 할 수있는 능력이 있다면 Update-Database -Script
을 실행하는 것입니다. 그런 다음 각 마이그레이션 (자동 작업 포함)과 SQL 명령이 순서대로 적용될 때이를 볼 수 있습니다. 다음 단계에서 필요하기 때문에 전체 SQL 파일을 저장하십시오.
다음으로 거대한 Base64 문자열을 포함하는 INSERT
명령으로 구분되는 각 명령 블록을 살펴보십시오. 자동 마이그레이션을 포함하여 각 마이그레이션 단계가 분리되어 순서대로 배치되어 있음을 알 수 있습니다. 이 쌍 각각에 대해 우리는 INSERT
명령 위의 모든 내용과 마지막 마이그레이션의 INSERT
명령 아래 필요한 모든 항목을 필요로합니다. 이러한 작업을 마이그레이션 작업이라고합니다. 부여
는,이 규모에서 시간이 좀 걸릴 것입니다,하지만 다음 실행 Add-Migration -IgnoreChanges
새로운 Sql()
작업을 추가 Up()
방법으로 빈 상태 (empty)의 마이그레이션을 스캐 폴딩하고 그것으로 (즉, Sql("<your_awesome_script>")
)를 현재 마이그레이션 작업을 복사하는 것을 알고 있습니다. 안전을 위해 해당 Down()
을 작성해야 할 수도 있습니다.
다음으로 돌아가서 작업중인 자동 작업 전후의 마이그레이션의 TimeStamps를 확인하십시오. 이 명령은 INSERT
명령의 첫 번째 매개 변수는 201710152132114_<MigrationName>
입니다. 이 둘 사이에 DateTime을 선택하고 해당 DateTime을 사용하여 새 마이그레이션의 .cs
파일 이름을 지정하십시오. 이렇게하면 나중에 사용할 수 있도록 솔루션 내부에서 올바르게 이전 할 수 있습니다.
마지막으로, 이전의 .Designer.cs
파일을 열고 get
에하여 ImigrationMetadata.Id
기존 Id
문자열 당신이 만든 새 마이그레이션 이름을 교체의 내부. 이것이 EF가 프로그래밍 작업을 통해 마이그레이션 작업을 주문하는 방식입니다.
이미 일부 마이그레이션이 적용된 새 시스템으로 이동하는 경우 사용중인 데이터베이스의 인스턴스를보고 __MigrationHistory
테이블에있는 최신 항목의 ID가 무엇인지 확인하십시오. 그런 다음 개발 환경에서 마이그레이션 대상을 으로 되 돌린 후으로 마이그레이션하고 각 자동에 대해 위에 나열된 단계를 따르십시오. 이처럼 모든 자동 마이그레이션을 한 번에 변환 할 수 있다면 앞으로 모든 명시 적 마이그레이션을 새로운 환경에 배포 할 수 있습니다.
개발 환경과 테스트 환경에서 작업 할 때까지는 프로덕션 시스템에서이 작업을 시도하지 않는 것이 좋습니다.
모든 것이 동기화되어 있다면 제안한대로 이전을 재설정하십시오. 새로운 기준선 ('Add-Migration NewBaseline -IgnoreChanges')을 수립하고 앞으로 나아가는 마이그레이션을 추적하십시오. 우리는이 일을 여러 번 해 봤습니다. –