临时附加/连接到SQL Server LocalDB文件

时间:2014-11-03 10:45:11

标签: sql-server unit-testing localdb

我正在尝试以编程方式创建并连接到特定于应用程序的LocalDB数据库。我想通过仅指定.MDF文件的文件名来实现此目的,理想情况下不指定实例名称或在任何地方注册的数据库的名称。

要从某些单元测试中访问数据库,因此它只会在被删除之前短时间使用。我当前的方法正确地创建了.MDF文件,但是也使用默认实例注册了名称,我希望避免使用临时和非单例'数据库实例的性质。

是否有可能做我想做的事情,或者我误解了LocalDB的工作方式?

2 个答案:

答案 0 :(得分:3)

LocalDB automatic instance with specific data file

Server=(localdb)\v11.0;Integrated Security=true;
AttachDbFileName=C:\MyFolder\MyData.mdf;

更新

这可以与.testsettings文件中的“部署”区域一起使用。您只需要选中“启用部署”并将.mdf和.ldf文件添加到“要部署的其他文件和目录”。

然后您可以简单地使用上面的连接字符串,测试运行器将负责将您的数据文件移动到适当的临时文件夹。

答案 1 :(得分:0)

Chrisb的回答让我找到了解决这个问题的正确方法,但我注意到即使在连接关闭后,数据库仍然附加到LocalDB中的默认实例。我读到这可能最终会在几分钟后被清除,但在我的情况下,这个文件位于MSTest使用的临时目录中并且必须及时关闭以便在测试运行结束时进行清理。

解决方案是在使用连接后立即使用类似于https://stackoverflow.com/a/26712648的连接字符串和类似于https://stackoverflow.com/a/6646319的分离过程。

首先创建MDF文件可以通过连接到自动LocalDB实例,执行CREATE DATABASE然后使用相同的分离方法来完成。通过使用由于允许更长的名称而允许在LocalDB中使用的数据库名称的文件名,我无可置疑地确保数据库名称不会与计算机上的任何其他内容冲突,即使在它保持连接的短时间内也是如此。