0

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

类库和服务等项目具有与同一数据库的 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做到这一点的技巧或方法?

4

1 回答 1

0

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

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

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

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

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

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

于 2014-06-30T15:24:30.737 回答