Условное ConnectionString в зависимости от того, в какой папке опубликовано приложение - PullRequest
0 голосов
/ 01 октября 2009

Я вхожу в стадию параллельного тестирования и разработки, где мне нужно использовать один дБ для теста и другой для dev. Как я могу заставить приложение выбирать, какую строку подключения реализовать в зависимости от того, в какой физической папке оно (приложение) находится?

Я знаю, что есть стратегии SVN, но они достаточно малы, чтобы избежать двух отдельных кодовых баз. Хотел бы иметь возможность публиковать один и тот же проект VS в любом из 2 моих каталогов без напоминания о необходимости изменить строку подключения.

Я работаю под IIS7, поэтому, возможно, он предлагает лучший контроль, чем условия в (и переопределяет) web.config. (или нет)

Thankx!

Ответы [ 4 ]

2 голосов
/ 01 октября 2009

Совет:

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

Вместо этого управляйте им с помощью параметра в файле web.config. Просто добавьте параметр, который позволяет переключаться между производственной базой данных и базой данных разработчика. Фактически, вы можете просто проверить наличие параметра режима отладки. Если этот параметр есть, вы нацелены на базу данных разработки; в противном случае вы ориентируетесь на производство.

Хорошая особенность этого решения в том, что оно не зависит от , где вы развертываете сайт, и вы можете задокументировать настройку в файле Web.config.

Надеюсь, это поможет.

Правка для Clarity: Под «настройкой режима отладки» я подразумеваю настройку, которая определяет, на какую базу данных вы нацеливаетесь, dev / production. Не работает ли ваше приложение в режиме отладки, так как Framework уже предоставляет функцию, которая делает это. Кроме того, вы не обязательно удалите этот параметр, поскольку хотите сохранить его в целях документирования. Скорее, вы закомментируете это.

0 голосов
/ 01 октября 2009

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

В web.config:

<?xml version="1.0"?>
<configuration>
    <!-- connection strings are located in an external config 
     file to facilitate deployment in various environments -->
    <connectionStrings configSource="connections.config"></connectionStrings> 
</configuration>

В connections.config:

<?xml version="1.0"?>
<connectionStrings>
    <add name="ConnectionName" connectionString="[your connection string]"/>
</connectionStrings>

После развертывания я обычно исключаю connections.config из будущих развертываний (если это не должно быть изменено).

0 голосов
/ 01 октября 2009

Получить уникальную строку для приложения, возможно что-то вроде:

string folder = Regex.Match(Server.MapPath("~"), @"\(.+?)\$").Groups[0].Value;

Затем используйте строку для получения значения из web.config:

ConnectionStringSetting connectionString = ConfigurationManager.ConnectionStrings["ConnectionString." + folder] ?? ConfigurationManager.ConnectionStrings["ConnectionString"];

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

0 голосов
/ 01 октября 2009

Вы можете, например, создайте контейнер <connectionStrings>, содержащий строку подключения для каждой папки, в которой может находиться ваше приложение:

<connectionStrings>
  <add name="Folder1" connectionString=".....(conn str. #1)...:" />
  <add name="Folder2" connectionString=".....(conn str. #2)...:" />
  ....
  <add name="Folder-n" connectionString=".....(conn str. #n)...:" />
</connectionStrings>

, а затем просто выберите правильный, в зависимости от того, откуда запускается ваше приложение.

Марк

...