2014-09-10 2 views
0

Я работаю над проектом на какое-то время, у которого есть производственная версия, работающая в среде совместного размещения, и одна на моей машине разработки. Проблема в том, что каждый раз, когда я хочу запускать приложение на моей машине разработки, мне придется изменить параметры строки подключения, чтобы указать на локальную машину разработки и наоборот, когда я хочу опубликовать. Это стало настолько неудобным для меня, пока я не придумал такие решения, которые работают как минимум. Мой вопрос в том, является ли это мое решение профессиональным и надежным в среде Aspnet? Или есть лучший и проверенный способ добиться этого решения лучше? Спасибо. см. код для деталей.AspNet Mvc автоматически выбирает ConnectionString

//Created a static method in Global.asax.cs  

/// <summary> 
    /// Returns Connection settings based on the machine. i.e, automatically select connection strings if it's development or live server 
    /// </summary> 
    /// <param name="ArrayIndex"></param> 
    /// <returns> string BaseConn = (connectionstring name) </returns> 

public static string 

    Settings(int ArrayIndex) 
    { 


     string[] BaseConn ={ HttpContext.Current.Request.IsLocal ? System.Configuration.ConfigurationManager.ConnectionStrings[4].Name : 
     System.Configuration.ConfigurationManager.ConnectionStrings[1].Name, 

//Identity database connections 

     HttpContext.Current.Request.IsLocal ? System.Configuration.ConfigurationManager.ConnectionStrings[5].Name : 
     System.Configuration.ConfigurationManager.ConnectionStrings[2].Name, 

//store database connection 

     HttpContext.Current.Request.IsLocal ? System.Configuration.ConfigurationManager.ConnectionStrings[6].Name : 
     System.Configuration.ConfigurationManager.ConnectionStrings[3].Name, 
           }; 
     return BaseConn[ArrayIndex]; 
    } 

Тогда я назвал метод в классе DbContext прослеживание

public class MyAppDb :DbContext 

{ 


    public MyAppDb() 
     : base(MvcApplication.Settings(0)) 
    { } 

// Some entity tables here 
} 

Я сделал то же самое для магазина DbContext и идентичность DbContext. Все кажется прекрасно работающим как на местной, так и на живой машине. хотя я не смог обновить базы данных с помощью этого решения с помощью миграции codefirst. На данный момент не проблема.

ответ

1

Вам необходимо использовать Web.Release.Config.

В Web.config вы укажете свою собственную (локальную) строку соединения, и при выпуске вы будете использовать что-то вроде этого (измените конфигурацию в соответствии с вашим собственным SQL-соединением).

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
    <add name="MyContext" 
     connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SalvaVidas;Server=ServerName;Database=MyDb;Trusted_Connection=True;Integrated Security=SSPI;" 
     xdt:Transform="SetAttributes" 
     xdt:Locator="Match(name)"/> 
</connectionStrings> 

Убедитесь, что свойство name совпадает в обоих. В этом примере это: name = «MyContext»

ПРИМЕЧАНИЕ. Пожалуйста, убедитесь, что при публикации вы перейдете в режим RELEASE.

+1

Большое количество Codebased для вашего времени. Это похоже на стандартный способ сделать это. Я должен использовать это вместо своего собственного решения, хотя работа без ошибок. – codein

0

Лучше использовать Web.Config Transformations.

Идея заключается в том, что при развертывании вы выбираете целевую среду, и файл конфигурации будет автоматически преобразован в соответствии с изменениями, описанными в файле Web.{CONFIGURATION_NAME}.config.

Например, чтобы изменить Connection-String для конфигурации Release тебе понадобится это в Web.Release.config файле:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
    <add name="MyDB" 
     connectionString="{SQL_SERVER_CONNECTION_STRING_FOR_RELEASE}" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 
</configuration> 

См Tutorial

+0

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

0

Так что, когда кто-то забывает (а кто-то будет) для установки режима «выпуска» или «отладки» ваша система будет ошибочно ударять по данным разработки или производственным данным, это похоже на рецепт катастрофы .... это просто не кажется мне неудачным доказательством. Должен быть способ кодирования этого приложения. Например, вы можете запрограммировать так, чтобы ваше приложение определяло, на каком сервере оно выполняется, если это производственный сервер, то используйте строку производственного подключения .... если это тестовый сервер, то используйте строку тестового соединения, иначе используйте строку соединения разработки ,

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