使用Linq to SQL在本地和远程之间切换`ConnectionStrings`

时间:2010-03-04 13:14:15

标签: c# .net linq-to-sql datacontext data-access-layer

首先,通过Remote我的意思是我们网络上的中央专用SQL Server。通过本地我的意思是本地SQL Express安装。

我的情况只在内部。没有云服务,外部网站等。我的应用程序允许用户断开工作,但为了最大限度地减少流量和其他一些问题,我想让他们在可用的时候自动连接到中央服务器。 /或当他们设置选择中央服务器的设置时。

设置非常简单。每个人的本地连接字符串都是这样的 - >

Data Source=.\SQLEXPRESS;Initial Catalog=MemberCenteredPlan;Integrated Security=True

和像这样的中央SQL连接字符串 - >

Data Source=CentralSQL;Initial Catalog=MemberCenteredPlan;Integrated Security=True

此外,我的数据在我的UI中是一个单独的项目,因此我很难找到如何从UI层的数据层访问设置文件。

我应该向所有方法添加参数并将IsOnline变量传递给它们吗?似乎重复,但如果我知道一个更好的方式,我不会在第一时间发布。

感谢您的帮助!

This is a very similar post但我想知道当我想在运行期间在本地数据库和远程数据库之间切换时,建议是否不同。

2 个答案:

答案 0 :(得分:3)

我使用的一个选项是在这种情况下在DataContext上创建一个方法(在分部类中):

public static DataContext New
{
  get
  {
    var cs = IsConnected ? CentralConnectionString : LocalConnectionString;
    return new DataContext(cs);
  }
}

你可以加强那个开关逻辑,但你想要自动切换。然后在代码中引用,只需使用这样的格式:

var DB = DataContext.New;
var result = from a in DB.....

它将您的datacontext创建逻辑保存在一个位置,如果它符合您的需求,我发现它简化了各处的事情。

答案 1 :(得分:2)

为了回答您在对Nick的回答的评论中提出的问题,他的IsConnected是添加到部分类的属性。您可以将其定义为必须在程序中确定该状态的任何方法。如果它是AppSetting值,它将是这样的:

public static bool IsConnected 
{ 
  get 
  {
       return ConfigurationManager.AppSettings["Online"] == "true";
  }
}