【问题标题】:VS2012 DBML Changing Connection StringVS2012 DBML 更改连接字符串
【发布时间】:2014-03-18 14:44:45
【问题描述】:

我有一个包含多个项目的解决方案,例如类库、网站、服务等。

类库和服务等项目具有与同一数据库的 dbml 连接。这意味着项目具有连接字符串,例如:

MySolution.ClassLibrary.DatabaseA
MySolution.ClassLibrary.DatabaseB
MySolution.ClassLibrary.DatabaseC
MySolution.Service.DatabaseA
MySolution.Service.DatabaseD

这有点乱,因为我正在复制连接字符串。出于集成目的,我还添加了另一个共享组件类库——它也可以访问相同的数据库(不同的表)。所以我现在在某些地方有 3 个相同连接字符串的实例!

如前所述,这不仅很混乱,而且还存在漏洞,因为如果网站或服务中缺少连接字符串,它最终会尝试指向我们的开发数据库(因为它默认设置为来自类库)。

我真正想要的只是拥有一个非或通用命名空间版本的连接字符串,并在任何地方共享它,例如

MySolution.ConnectionStrings.DatabaseA
MySolution.ConnectionStrings.DatabaseB
MySolution.ConnectionStrings.DatabaseC
MySolution.ConnectionStrings.DatabaseD

然后我会将每个 dbml 指向这些连接字符串并完成工作!

问题在于 VS2012 在更改 dbml(右键单击 > 属性)中的连接字符串时出现问题。它在 app 或 web.configs 和 Settings.settings 之间混淆 - 通常在选择 DatabaseConnectingStringA 时,它会创建一个名为 DatabaseConnectionStringA1 的新的,这非常令人沮丧!当您通过项目设置添加它时,它也会始终将它自己的命名空间添加到连接字符串中 - 这是 dbml 所必需的。

有没有人有技巧或方法让 VS 做到这一点?

【问题讨论】:

  • 最后,只有来自运行程序集的连接字符串很重要。其他的仅存储以了解您用于生成模型的数据库。因此,您只需确保正在运行的程序集本身不包含 DBML。

标签: linq visual-studio connection-string dbml


【解决方案1】:

最后我确实找到了解决方案。它并不完美,但它已将我的连接字符串从 7 或 8 个(在某些地方)减少到 4 个,我可以在所有项目之间复制和粘贴,以进行各种调试/发布/暂存构建。

基本上,对于每个 DBML,我都添加了一个带有构造函数的部分类,该构造函数专门使用我的连接字符串:

partial class MyDataContext
{
    public MyDataContext() : base(ConfigurationManager.ConnectionStrings["Master.DatabaseA"].ConnectionString)
    {
        OnCreated();
    }
}

然后,在加载可以看到所有表的 DBML 文件后,我右键单击并选择后台属性并将连接更改为无。

这意味着 Web 或 App Config 将在不引用项目命名空间的情况下查找仅包含“Master.DatabaseA”的连接字符串。

然后我还清除了其他项目中的旧连接字符串,现在一切正常。唯一的问题是,每次添加新表或存储过程时,我都需要将连接设置回无。该项目不会在这种情况下构建,因此不会意外错过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2015-06-11
    • 2018-09-20
    • 2016-09-24
    • 1970-01-01
    相关资源
    最近更新 更多