2014-11-03 18 views
1

我试图以编程方式创建并连接到特定于应用程序的LocalDB数据库。我想这样做只需指定一个.MDF文件的文件名,理想情况下不需指定实例名称或任何地方注册的数据库的名称。暂时附加/连接到SQL Server LocalDB文件

数据库将被从某些单元测试中访问,因此它只能在被删除之前使用一段短时间。我目前的方法正确创建.MDF文件,但也注册名称与默认实例,我想避免考虑到数据库实例的临时和“非单实例”性质。

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

回答

3

LocalDB automatic instance with specific data file

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

更新

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

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

+0

谢谢,这让我走上了正轨。 – 2014-11-03 12:26:24

0

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

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

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

+0

我更新了一个错过的假设 - 使用.testsettings文件和部署意味着您不必担心分离等问题......您有一个坐在资源文件夹中的主.mdf/.ldf文件,以及当你的单元测试执行时,测试引擎会处理它的拷贝。 – chrisb 2014-11-03 12:40:22