2015-11-04 4 views
1

я могу обновить базу данных в веб-конфигурации:Выбор конфигурации сборки DbContext миграции

Update-Database -Verbose 

Когда база данных развертывается, у меня есть другая строка подключения определена в web.config.debug файл преобразования.

Как я могу использовать правильную строку соединения для конфигурации сборки?

Например:

Web.config:

<configuration> 
    <connectionStrings> 
     <add name="MyConnection" connectionString="My_Local_Connection_String"/> 
    </connectionStrings> 
</configuration> 

Web.config.Debug:

Web.config.Release:

<configuration> 
    <connectionStrings> 
     <add name="MyConnection" connectionString="My_Release_Connection_String" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 
</configuration> 

Как только я доказал, что миграция локально в порядке, мне нужно сделать такую ​​же миграцию в строке подключения Web.config.Debug и, предположив, что работает тогда версия выпуска.

Как сообщить EF, какое преобразование конфигурации использовать?

+0

ли вы имеете в виду ваш W В eb.config есть строка подключения тестовой базы данных, и вы хотите, чтобы опубликованный проект заменил ее на строку производственного подключения. Поскольку FYI преобразования применяются только к публикации, а не к сборке. –

+0

Опишите ситуацию подробнее. Что вы подразумеваете под правильной строкой соединения для конфигурации сборки? – mehrandvd

+0

@ThomasBoby Да, я знаю, что они выполняются в публикации. Итак, это случай копирования строки подключения из файла конфигурации или есть лучший способ? – BanksySan

ответ

0

Есть, вероятно, более причудливые решения, но простой, что приходит на ум: (т. Е MyApplication-Debug, MyApplication-релиз)

  1. Положите все ваши строки соединения в web.config с соответствующими именами
  2. В классе конфигурации миграции, указать строку соединения с помощью препроцессора #if, как

    internal sealed class Configuration : DbMigrationsConfiguration<MyApplicationContext> 
    { 
        public Configuration() 
        { 
         AutomaticMigrationsEnabled = false; 
    
         string connectionStringName; 
    #if DEBUG 
         connectionStringName = "MyApplication-Debug"; 
    #else 
         connectionStringName = "MyApplication-Release"; 
    #endif 
    
         TargetDatabase = new DbConnectionInfo(connectionStringName); 
        } 
    } 
    
+0

Хотя это будет работать, это было бы ужасно. Специалисты-разработчики прошли от меня с отвращением. – BanksySan

+0

Почему? Это делает то, что вы хотите сделать. Если это неправильно, возможно, вам придется изменить свои требования. Для записи я никогда не применял бы миграцию к db release. –

+0

Потому что теперь у меня есть конфиг, который должен знать обо всех конфигурациях сборки. Мои имена соединений не являются общими для сред. Каждый раз, когда у меня есть конфигурация сборки, я добавляю еще один предварительный компилятор if. Вы правы в том, что это функционально умело, но это не * хорошее * решение. – BanksySan