2015-12-08 4 views
0

Я и мой коллега работают над приложением, которое подключается к базе данных, используя LINQ (а затем файлы DBML). Каждый из нас имеет свою собственную строку подключения для того, чтобы работать на собственной базе данных, как так:Свойство Reference class в app.config?

public class DbConfig 
{  
    public static string conStr = @"My connection string"; 
    public static string conStr = @"His connection string"; 
} 

Каждый раз, когда каждый из нас работает по своей части проекта, мы просто закомментируйте другую строку подключения. Мое соединение, если я могу ссылаться на любой из двух свойств conString в файле app.config, используемом DBML-файлом. Спасибо.

+0

Возможный дубликат [Получить строку подключения из App.config] (http://stackoverflow.com/questions/6536715/get-connection-string -from-app-config) – DrewJordan

+1

Думаю, вы думаете об этом с неправильного направления. Я хотел бы ссылаться на app.config в статическом конструкторе, а не ссылаться на статическое поле в app.config. –

ответ

2

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

public static class ConnectionString 
{ 
    public static string Get 
    { 
     get 
     { 
      if(ConfigurationManager.ConnectionStrings.Count == 0) 
       throw new Exception("No connection strings"); 

      var machineConnectionString = ConfigurationManager.ConnectionStrings["ConStringPrefix" + Environment.MachineName]; 
      var genericConnectionString = ConfigurationManager.ConnectionStrings["DefaultConString"]; 
      return machineConnectionString ?? genericConnectionString; 
     } 
    } 
} 

А потом у вас app.config вы будете иметь:

<connectionStrings> 
    <add name="[email protected]" connectionString="Data Source=.\sqlexpress;Initial Catalog=DatabaseName;Integrated Security=true" providerName="System.Data.SqlClient" /> 
    <add name="[email protected]" connectionString="Data Source=.\sqlexpress;Initial Catalog=DatabaseName;Integrated Security=true" providerName="System.Data.SqlClient" /> 
    <add name="nhibernate.conexao" connectionString="Data Source=.\sqlexpress;Initial Catalog=DatabaseName;Integrated Security=true" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
0

можно создать конфигурацию персональной сборки (https://msdn.microsoft.com/en-us/library/kwybya3w.aspx) и определить в этой конфигурации некоторых пользовательских тег, чтобы в коде, вы могли бы

#if MyBuild 
    public static string conStr = @"My connection string"; 
#endif 

#if HisBuild 
    public static string conStr = @"His connection string"; 
#endif 

определить пользовательский

открыть проект Страницы свойств -> Build, затем измените свойство Conditional Compilation Constants после выбора вашей настраиваемой конфигурации.

это, как вы можете определить свои собственные символы и затем иметь #if #endif, что практически включить/исключить код, основанный на текущих настройках сборки (например, написание #define YourSymbol на верхней части каждой страницы)

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

просто положите в свой app.config/web.config строку, такую ​​как

<appSettings configSource="YourCustomConfiguration.config"/> 

, а затем не добавить его в teamfoundation или что-то резюме вы используете

конечно YourCustomConfiguration.config файл, вы можете поместить его туда, куда вы хотите, просто указать относительный путь

хорошо, я уже сказал AppSettings, но вы можете использовать configSource для все, что нужно, в вашем случае <connectionStrings configSource="YourCustomConnectionStrings.config">

+0

это работает, хотя для меня это кажется забавным. Что происходит, когда команда становится 10 человек, 10 конфигураций сборки? Обычно (по крайней мере, IMHO) лучше просто использовать 'app.config' и не проверять его, так что каждый член может иметь свою собственную версию. – DrewJordan

+0

У меня есть другое решение для этого, позвольте мне отредактировать мой пост –

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