Сценарий: веб-приложение ASP.Net (n-уровень linq2sql) на локальном IIS с подключением к базе данных SQL 2008 через VPN.Некоторые данные реплицируются в локальную экспресс-базу данных SQL 2008 (другое имя).Если соединение подключено к базе данных VPN, мы хотели бы использовать локальный экземпляр для некоторых частей веб-приложения.
Мой вопрос: как улучшить следующее решение.у нас есть много передачи строки подключения о.Если бы это включало зеркалирование, мы могли бы установить партнера по отработке отказа, но, поскольку это другая база данных, я не думаю, что это возможно.
Текущий код:
Проверьте, можем ли мы подключиться удаленно, поместите рабочую строку подключения в сеанс
Session_Start()
{
//if can connect to remote db
Session["ConnStr"] = //remote connection
//else
Session["ConnStr"] = //local connection
}
Передайте строку подключения в пользовательском интерфейсе на BLL
protected void ods1_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
TestManager myTestManager = new TestManager(Session["ConnString"].ToString());
e.ObjectInstance = myTestManager;
}
Передать в DAL
public class TestManager
{
private readonly string _connectionString;
public TestManager(string connectionString)
{
_connectionString = connectionString;
}
[DataObjectMethod(DataObjectMethodType.Select, true)]
public List<Test> GetAll()
{
TestDB testDB = new TestDB(_connectionString);
return testDB.GetAll();
}
}
Установить соединение в DAL, создавая DataContext в конструкторе
public class TestDB
{
public TestDB(string connectionString)
{
_connectionString = connectionString;
_dbContext = new TestDataContext(_connectionString);
}
private TestDataContext _dbContext;
private string _connectionString;
public string ConnectionString
{
get
{
return _connectionString;
}
set
{
_connectionString = value;
}
}
public TestDataContext DbContext
{
get
{
return _dbContext;
}
set
{
_dbContext = value;
}
}
public List<Test> GetAll()
{
var query = from t in DbContext.Tests
select new DTO.Test()
{
Id = t.Id,
Name = t.Name
};
return query.ToList();
}