2017-01-30 2 views
2

Существуют некоторые базовые данные, специфичные для сред Dev/Test/Prod.Миграции данных Entity Framework для разных сред

Мы используем теперь миграции Entity Framework для всех сред, но не знаем, как указывать миграции для определенных сред таким образом, чтобы мы указали, что миграция должна выполняться только в Dev/Test/Prod.

Это может быть выполнено в Fluent Migrator с атрибутами Tag. Но как насчет Entity Framework?

ответ

1

Когда вы говорите «базовые данные», я предполагаю, что вы имеете в виду посев каждой среды. Для этого миграция обеспечивает seeding mechanism. В Seed() вы можете различать среды, как в обычном коде. Мы хотели бы использовать преобразование Web.config настройки:

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" }, 
     ); 
    } 
} 

Другой вариант директивы компилятора:

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. Когда мы готовы к развертыванию в UAT, мы можем просто указать строку соединения в UAT и выполнить миграцию, или мы можем create a script обновить базу данных. В PROD мы делаем this.

Смежные вопросы