Не передавайте строку подключения в слое BO.Вместо этого используйте идентификатор, а затем фабрику на своем уровне DAL, чтобы перейти и получить строку подключения / DAL.
Например, файл конфигурации DAL Dll:
<Connections>
<connection name="test" connectionString="Data Source=####\SQL2008;Initial Catalog=test;User Id=####;Password=####;" providerName="System.Data.SqlClient">test</connection>
<connection name="test2" connectionString="Data Source=####\SQL2008;Initial Catalog=test2;User Id=####;Password=####;" providerName="System.Data.SqlClient">test2</connection>
</Connections>
Когда клиент входит в системув вашем приложении предоставьте им выпадающий список доступных соединений (или спрячьте его через файл конфигурации, если вы не хотите, чтобы пользователи выбирали соединение), а затем используйте его для фабрикации соединения с базой данных.
Объектыкоторые передаются между слоями, будут иметь этот идентификатор.Используйте идентификатор для создания соединения DAL.
Пример объекта передачи данных, который может передаваться между слоями (с идентификатором):
/// <summary>
/// A data transfer object is sent between layers. It has a few base properties
/// as well as a list of payload objects.
/// </summary>
[DataContract(Namespace= SharedModelNamespace.Namespace.SharedModel)]
public class DataTransferObject
{
/// <summary>
/// As part of the data transfer object, it specifies what environment to connect
/// to should it make a DAL call.
/// </summary>
[DataMember]
public string DataEnvironment {get; set };
/// <summary>
/// These are the list of objects (the payload) that will be transferred
/// back and forth from the server to the client.
/// </summary>
[DataMember]
public List<BasePOCO> DataTransferObjects { get; set; }