2015-07-28 3 views
1

Обычно в приложении .NET вы храните строки подключения к базе данных в app.config.Обработка строк подключения app.config при запуске нескольких экземпляров приложения

Для одного .exe существует один файл .exe.config. И мы используем Entity Framework, которая по умолчанию использует параметр .config, который соответствует имени DbContext. Что все работает нормально, если вы следуете общей схеме, когда один экземпляр приложения разговаривает с одной базой данных.

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

Возможные решения:

  1. Создание нескольких копий EXE-файл, каждый со своей собственной копией .config, и поставить другую строку соединения в каждом. Преимущество? Изменений нет. Недостаток? Поддержание всех разных копий, обеспечение их обновления и т. Д.
  2. Сохраните одну копию .exe с одной копией .config и поместите несколько строк подключения в .config. Затем передайте аргумент командной строки программе, которая выбирает, какую строку подключения использовать. Преимущество? Только один .exe для управления. Недостаток? Изменение кодировки, вероятность того, что кто-то испортит аргументы командной строки.
  3. Некоторые другие блестящие идеи, что кто-то здесь, на Stack Overflow, будет указывать на меня.

Любые идеи?

Я уверен, что люди раньше занимались этой проблемой. Существует ли общий способ решения проблемы?

+0

Как часто будет они будут повторно запущены? Если не часто, то определенно лучший вариант. Кроме того, сколько усилий будет иметь изменение кодировки? – nicV

+0

Это фоновые службы, работающие в командном окне или в виде служб Windows, которые выбирает клиент. В любом случае, они должны работать круглосуточно. –

+0

В таком случае они не будут перезапущены, что часто, вариант 2 лучше. Добавьте некоторую проверку того, что введенная опция работает и пусть это будет! В конечном итоге изменение кода будет стоить единственной конфигурации для управления! – nicV

ответ

2

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

AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "path to config file") 

увидеть это подробно: Relocating app.config file to a custom path

+0

Я не уверен, что было бы проще управлять, чем иметь один app.config с несколькими строками подключения (мой выбор № 2), но это реальная альтернатива, которую я не рассматривал, и это то, о чем я просил, поэтому это стоит upvote. –

0

Вы можете попробовать что-то подобное в некоторых приложениях C#, чтобы изменить строку подключения для каждого приложения.

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
var connectionStringSection = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
connectionStringSection.ConnectionStrings["database"].ConnectionString = string.Format("Data Source={0}", userCon); 
config.Save(); 
ConfigurationManager.RefreshSection("connectionStrings"); 
+0

На первый взгляд это похоже на изменение строки подключения в app.config. И это не устраняет проблему. –

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