在多个项目中使用 SQL 数据库

CSh*_*der 3 c# sql database connection-string

我有一个包含 5 个应用程序的系统。每个应用程序都通过 DAL 库访问数据库。在 DAL 中,我有一个包含以下条目的 app.config:

<connectionStrings>
<add name="DataAccessLayer.Properties.Settings.ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=c:\users\something\something\MyDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

使用 AttachDbFilename 的完整路径效果很好。但我不高兴:

  1. 我已将 app.config 文件复制到使用数据库的每个应用程序中。执行此操作的最佳方法 - 将 DAL app.config 复制为其他项目中的链接?

  2. 当涉及到无法正常工作的部署时,我不需要完整的路径。app.config 中的相对路径似乎不起作用。理想情况下,我希望能够将 DAL 从源代码管理拉到任何计算机上,而不必担心每次更改连接字符串。这:链接讨论 |DataDirectory| 出于部署目的,但这对我来说在调试中不起作用(除非我使用错误,请参见3)

  3. 作为一个单独的问题这可能会更好,但它与 2. - 是否有一种“好的”方法来安排多个项目进行调试?我创建了一个 Bin 目录,并在每个项目设置中将 dll/exe 复制到该 bin 目录。我在这里还有数据库的副本(我在 app.config 中尝试了任何路径,但这也不起作用,|DataDirectory| 也不起作用)。同样令人难以置信的是,相对路径在“调试\工作目录”设置中也不起作用,因此看起来每次将代码检出到新机器时都必须更改这个地方?

对战争与和平表示歉意,并提前感谢您的任何想法。

Rem*_*anu 5

使用引用同一MDF的多个进程的连接字符串 AttachDbFilename 功能是非常糟糕的主意。共享自动附加数据库可能会让您遇到各种复杂的安全/所有权数据库启动问题。指定User Instance=True就像火上浇油,因为每个用户实例都是每个用户,因此如果您的应用程序曾经配置为在不同的应用程序池凭据下运行,或者突然更改为模拟,那么一切都会崩溃。

只需将 MDF 作为普通数据库永久附加到 SQL 实例并使用它,并使用普通连接字符串:Data Source=.\SQLEXPRESS;Initial Catalog=<dbname>; Integrated Security=True