TFS 릴리스 관리를 사용하여 지속적인 통합 및 배포를 수행하고 있습니다.이전 버전을 배포하기위한 EF 코드 우선 마이그레이션
전 배포 중에 데이터베이스 마이그레이션을 수행하기 위해 migrate.exe를 사용하고 있습니다. 이전 버전에서 최신 버전으로 전환 할 때 유용합니다. 그러나 이전 버전의 응용 프로그램을 배포하려는 경우 더 진부 해집니다.
기본적으로 컨텍스트에 대한 마이그레이션을 보유하고있는 어셈블리는 버전 3에서 버전 2로 이동하는 방법을 알아야합니다. 일반적으로 배포 할 어셈블리를 마이그레이션 원본으로 사용하지만이 이미 배포 된 어셈블리는 v3에서 v2로 전환하는 방법을 알고있는 유일한 멤버이므로 사용해야합니다. (버전 2에서는 v3도 존재하지 않는다는 것을 알 수 있습니다.)
현재의 계획은 배포 중에 어떻게 든 두 어셈블리를 비교하는 것입니다. 설치 디렉토리에있는 어셈블리가 배포 이사의보다 "새로운"마이그레이션을 포함하는 경우, 내가 먼저 배포 디렉토리에있는 어셈블리의 "최신"가능한 마이그레이션을 얻을 필요가 다음 실행합니다 :
migrate.exe AssemblyInInstallationDir /targetMigration NewestFromAssemblyInDeploymentDir
어디 새 버전으로 업그레이드하는 "정상적인"배포 시나리오에서, 당신은 다만 할 수 있습니다
migrate.exe AssemblyInDeploymentDir
이 합법적 인 방법인가? 아직 각 EF 라이브러리를 사용하여 각 어셈블리에서 사용할 수있는 마이그레이션을 평가할 필요가 없습니다. 이 어셈블리들 각각은 "같은"다른 버전이라는 사실에 대한 도전도 있습니다. 별도의 앱 도메인에로드 한 다음 교차 앱 도메인 통신을 사용하여 필요한 정보를 가져와야 할 것입니다.
편집
나는 나 같은 어셈블리의 두 가지 버전으로 사용할 수있는 마이그레이션을 나열 할 수 있습니다 개념 응용 프로그램의 증거를 만들었습니다. 이것은이 전체 과정에서 매우 중요했기 때문에 문서화 할 가치가 있다고 생각했습니다.
응용 프로그램은 리플렉션을 사용하여 각 어셈블리를로드 한 다음 System.Data.Entity.Migrations의 DbMigrator 클래스를 사용하여 마이그레이션 메타 데이터를 열거합니다. 마이그레이션 이름에는 타임 스탬프 정보가 접두어로 붙어있어서이를 주문하고 어떤 어셈블리에 "더 새로운"마이그레이션 세트가 포함되어 있는지 확인할 수 있습니다.
Curent Version: Test.Data, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null
Target Version: Test.Data, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null
Current Context Migrations:
201403171700348_InitalCreate
201403171701519_AddedAddresInfoToCustomer
201403171718277_RemovedStateEntity
201403171754275_MoveAddressInformationIntoContactInfo
201403181559219_NotSureWhatIChanged
201403181731525_AddedRowVersionToDomainObjectBase
Target Context Migrations:
201403171700348_InitalCreate
201403171701519_AddedAddresInfoToCustomer
201403171718277_RemovedStateEntity
나는이이 작업을 수행 할 수있는 승인 된 방법이지만, 문서화하고 당신의 접근 방식을 공유하기위한 칭찬 여부에 대한 답을 모르는 예를 들면 다음과 같습니다. –