Строка аварийного соединения в n-уровневом linq2sql - PullRequest
1 голос
/ 20 июня 2011

Сценарий: веб-приложение 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();


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...