在不同的机器上使用DBML模型但不同的连接字符串用于相同的模型

时间:2011-02-18 11:05:57

标签: c# asp.net sql linq

我希望标题不会太混乱。 这是我打算做的事情:

假设我在全国10个不同的网站中有10台个人服务器。 他们有一个数据库和前端桌面应用程序。

现在我有一个网站,我拥有SAME数据库结构/模型,就像10个服务器一样。我使用LINQ to SQL来设置查询,我将在执行查询之前更改DataContext的连接字符串。

所以基本上我在我的网络服务器上有数据库作为shell,如果你愿意,我可以根据web服务器数据库创建关系查询,并通过更改连接字符串将更新的信息发送回我喜欢的任何服务器的datacontext。

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

有意义吗?只是想确认我是否遗漏了任何东西

3 个答案:

答案 0 :(得分:1)

只需将所需的连接字符串(或连接)作为构造函数参数传递到数据上下文中,就可以在运行时执行此操作。您也可以在配置中配置它 - 通常在connectionStrings部分,但它取决于DBML的配置方式。

答案 1 :(得分:0)

我们的情况很像。简化后,我们的web.config文件包含以下条目:

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

然后在代码中,你可以:

use (var dc = new DbDataContext(ConfigurationManager.AppSettings[
                  System.Environment.MachineName.ToLower + "_ConnectingString"]))
{
    ....

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

答案 2 :(得分:0)

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

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

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

    它可能不适合你,但我很高兴这样做。