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

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

首先,我所说的远程是指我们网络上的中央专用 SQL Server。我所说的本地是指本地 SQL Express 安装。

我的情况只是在家里。没有云服务、外部站点等。我的应用程序允许用户离线工作,但为了最大限度地减少流量和其他一些问题,我希望允许他们直接连接到中央服务器,无论何时可用,或者/或者当他们设置选择中央服务器时。

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

数据源=.\SQLEXPRESS;初始目录=MemberCenteredPlan;集成安全性=True

和中央 SQL 连接字符串,如下所示 -->

数据源=CentralSQL;初始目录=MemberCenteredPlan;集成安全性=True

此外,我的数据与 UI 位于单独的项目中,因此我很难弄清楚如何从 UI 层的数据层访问设置文件。

我应该向所有方法添加参数并向它们传递 IsOnline 变量吗?似乎重复,但如果我知道更好的方法,我一开始就不会发帖。

感谢您的帮助!

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

最佳答案

在这种情况下,我使用的一个选项是在 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.....

它将您的数据上下文创建逻辑保留在一个位置,如果它满足您的需求,我发现它可以简化各处的事情。

关于c# - 使用 Linq to SQL 在本地和远程之间切换 `ConnectionStrings`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2379470/

相关文章:

c# - 在C#中调用MySql函数来验证用户名和密码

c# - .NET Math.Log10() 在不同机器上的行为不同

C#/.Net TryValidateObject - 如何本地化?

.net - WinForm绑定(bind)场景中的Datacontext Lifetime

sql-server - VB.NET - 创建 Nullable(Of T) 且 HasValue = False

linq-to-sql - 如何将 Lazy<T> 传递到我的投影中?

c# - 使用单一方法类——最好的方法?

javascript - 当模态类处于事件状态时,Google map 会消失

c# - Entity Framework 7 中奇怪的缓存问题

c# - .Net 无法创建 SSL/TLS 安全通道