我正在研究一个涉及使用数据库的项目,我正在对它进行单元测试。现在测试会创建一个数据库作为.mdf
文件并使用它。如何覆盖.mdf文件
我想要做的就是让这个.mdf
文件放到其它地方的副本,并在每次测试之前替换原来的文件.mdf
与我刚刚作出的副本。问题是,当我尝试这样做时,它说该文件正在被另一个进程使用。我发现这个过程是sqlservr.exe
。
我的问题是:有没有办法阻止服务器使用该文件,以便我可以替换它?我已经尝试过SQL Server BACKUP和RESTORE选项,但它们对我来说不够好,因为它们太慢了处理过程。
任何帮助将不胜感激。
UPDATE:
好了,多了几分问题的信息。基本上我正在改进我的单元测试的性能。大多数测试需要连接到数据库,所以我在.mdf
文件中有LocalDb。该文件在TestFixtureSetup
期间创建。然后,在每次测试之前(在SetUp
期间),通过SQL命令擦除数据库。这似乎不是每个测试重新创建新数据库的最有效方法。所以我尝试了两种截然不同的方法:
- 使用SQL BACKUP和RESTORE命令。这有效,但它增加了我的测试执行时间。
- 杀死
sqlservr.exe
进程,本地复制文件并重新启动sqlservr.exe
。这也可以,但也会增加执行时间。
所以基本上我正在寻找如何提高重建一个完全空的数据库的性能的建议。
停止服务,复制,然后再次启动? –
https://msdn.microsoft.com/en-AU/library/ms187858.aspx分离可能工作,然后将其附加回 –