n层linq2sql中的故障转移连接字符串

时间:2011-06-20 10:17:35

标签: c# asp.net sql-server-2008 linq-to-sql

场景:本地IIS上的ASP.Net Web应用程序(n层linq2sql),通过VPN连接到SQL 2008数据库。某些数据将复制到本地SQL 2008 Express DB(不同的名称)。如果连接到VPN数据库,我们希望将本地实例用于Web应用程序的某些部分。

我的问题是,如何改进以下解决方案。我们涉及很多传递连接字符串。如果这涉及镜像,我们可以设置故障转移伙伴,但由于它是一个不同的数据库,我不认为这是可能的。

当前代码:

检查我们是否可以远程连接,将工作连接字符串放入会话

Session_Start()
{
//if can connect to remote db
Session["ConnStr"] = //remote connection
//else
Session["ConnStr"] = //local connection
}

将UI中的连接字符串传递给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();


    }

0 个答案:

没有答案