2017-01-30 4 views
2

Dev/Test/Prod 환경에 특정한 기본 데이터가 있습니다.다른 환경에 대한 엔터티 프레임 워크 데이터 마이그레이션

우리는 현재 모든 환경에서 Entity Framework Migration을 사용하고 있지만 Dev/Test/Prod에서만 실행되도록 마이그레이션을 지정하는 방식으로 특정 환경에 대한 마이그레이션을 지정하는 방법을 알지 못합니다.

이것은 Fluent Migrator에서 Tag 속성을 사용하여 수행 할 수 있습니다. 그러나 Entity Framework는 어떻습니까?

답변

1

'기본 데이터'라고 말하면 각 환경에 시드를한다고 가정합니다. 마이그레이션은 seeding mechanism을 제공합니다. Seed() 내에서 일반 코드에서와 같이 환경을 구분할 수 있습니다. 우리의 Web.config가 설정 변환을 사용하려면 :

protected override void Seed(BookService.Models.BookServiceContext context) 
{ 
#if DEBUG 
    context.Authors.AddOrUpdate(x => x.Id, 
     new Author() { Id = 1, Name = "Test User" }, 
    ); 
#else 
    context.Authors.AddOrUpdate(x => x.Id, 
     new Author() { Id = 1, Name = "Production User" }, 
    ); 
#endif 
} 

마찬가지로 지금까지 마이그레이션 자체를 적용, 우리가 개발 this process 다음과 같습니다

protected override void Seed(BookService.Models.BookServiceContext context) 
{ 
    if (ConfigurationManager.AppSettings["DeployEnvironment"] == "UAT") 
    { 
     context.Authors.AddOrUpdate(x => x.Id, 
      new Author() { Id = 1, Name = "Test User" }, 
     ); 
    } 
    else if (ConfigurationManager.AppSettings["DeployEnvironment"] == "PROD") 
    { 
     context.Authors.AddOrUpdate(x => x.Id, 
      new Author() { Id = 1, Name = "Production User" }, 
     ); 
    } 
} 

또 다른 옵션은 컴파일러 지시어입니다. UAT에 배포 할 준비가되면 연결 문자열을 UAT로 지정하고 마이그레이션을 실행하거나 create a script을 사용하여 데이터베이스를 업데이트 할 수 있습니다. 우리는 PROD에서 this을 수행합니다.