Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DBML模型,但在不同的机器上对同一模型使用不同的连接字符串_C#_Asp.net_Sql_Linq - Fatal编程技术网

C# 使用DBML模型,但在不同的机器上对同一模型使用不同的连接字符串

C# 使用DBML模型,但在不同的机器上对同一模型使用不同的连接字符串,c#,asp.net,sql,linq,C#,Asp.net,Sql,Linq,我希望标题不要太混乱。 以下是我的计划: 假设我有10台服务器,分布在全国10个单独的站点。 他们有一个数据库和前端桌面应用程序 现在我有了一个网站,我的数据库结构/模型与上面的10台服务器相同。我使用LINQ to SQL设置查询,在执行查询之前,我将更改DataContext的连接字符串 因此,基本上我的Web服务器上有一个数据库作为shell,如果您愿意,我可以基于Web服务器数据库创建关系查询,并通过更改datacontext的连接字符串将更新的信息发送回我喜欢的服务器 如前所述,各个数

我希望标题不要太混乱。 以下是我的计划:

假设我有10台服务器,分布在全国10个单独的站点。 他们有一个数据库和前端桌面应用程序

现在我有了一个网站,我的数据库结构/模型与上面的10台服务器相同。我使用LINQ to SQL设置查询,在执行查询之前,我将更改DataContext的连接字符串

因此,基本上我的Web服务器上有一个数据库作为shell,如果您愿意,我可以基于Web服务器数据库创建关系查询,并通过更改datacontext的连接字符串将更新的信息发送回我喜欢的服务器

如前所述,各个数据库和Web服务器数据库的数据库结构始终相同。我将使用在代码中本地创建的DBML结构来更新数据和更改连接字符串


有道理吗?只是想确认我是否遗漏了任何内容,您可以在运行时通过将所需的连接字符串(或连接)作为构造函数参数传递到数据上下文中来实现这一点。您也可以在配置中配置它-通常在
连接字符串
部分,但这取决于DBML的配置方式。

我们有一个类似的情况。简化后,我们的
web.config
文件包含如下条目:

<appSettings>
    <add key="server1_ConnectionString" value="Data Source=myServerAddress;..."/>

代码根据运行它的机器使用不同的连接字符串。

我使用的解决方案是从web.config中完全删除连接字符串,并在包含网站的IIS上下文中定义它。 通过使用类似名称空间的命名约定,如“YourAppName.ConnectionString”,可以避免多个应用程序之间的冲突

这种方法的优点是多方面的

  • 每个环境都可以使用相同的部署文件,每个环境都有自己的配置
  • 部署新版本不应干扰任何现有配置,也不应要求系统管理员每次都编辑web.config
  • 由于连接字符串可能包含用户名和密码,因此生产环境的用户名和密码的值不提供给开发人员
  • 对连接字符串的更改不要求应用程序保持同步
  • 为了采用这种方法,您需要小心VisualStudio将连接字符串添加回web.config文件中,并且在对DBML进行更改后,该文件使用的默认连接字符串可能会发生更改。在这两种情况下,只需使用版本控制系统来管理这些更改的回滚


    它可能对您不起作用,但我很高兴这样做。

    这种方法会向开发人员“泄漏”生产配置详细信息-不总是允许的,从来都不是一个好主意。@belugabob:Stack Overflow的开发人员拥有生产服务器的管理员权限。我认为结果非常棒。如果他们有一个每月的发布周期,开发人员必须猜测生产环境是如何工作的,那么他们不可能走到这一步公正的评论,我想这取决于你的工作实践和严格程度。谢谢大家的及时回复。如果我再详细解释一下我的方法,你介意再看一眼吗。。。是的,我在web配置中设置了一组连接字符串。然后我在sql中的一个表中有了用户名和用户的位置。当用户登录到网站时,我会识别用户的位置并将连接字符串添加到datacontext(其中位置与web.config中连接字符串的位置名称相匹配),然后对该位置的RelEvent数据库执行查询。可以这样做,是吗?唯一的问题是,我需要使用一系列连接字符串,这取决于用户登录时所属的位置。这就是为什么我会将它们保存在配置中。这有意义吗?我刚刚又读了一遍你们的问题-我不得不说我不记得以前读过它-你们编辑过它吗,让它更清楚?不管怎样,根据上面的解释,马克·格雷威尔给出的答案听起来是正确的。我唯一不确定的是,对于多个用户,每个用户都使用自己的数据上下文,情况会有多稳定。
    use (var dc = new DbDataContext(ConfigurationManager.AppSettings[
                      System.Environment.MachineName.ToLower + "_ConnectingString"]))
    {
        ....