我为现有的SQLite应用程序添加了2个C#集成测试。每个测试都会创建一个数据库文件(使用Guid来保证唯一性),并对数据库执行一些操作。测试是孤立通过的,但是如果一个接一个地运行则失败。在尝试创建一个新的SQLiteConnection时,第二项测试失败,并显示“无法打开数据库文件”。
我怀疑SQLite自己的临时文件正在妨碍您。我在总结中提出的问题是:我可以做些什么让SQLite在测试结束后自行整理一下?
更多详细信息,以防万一与之相关:
在第一个测试完成之后,在第二个测试尝试创建其数据库文件之前,我可以在%TEMP%中看到许多文件和文件夹:
文件夹EAFBACB1-B978-419A-98B9-07258EB35C44.scratch
答案 0 :(得分:0)
临时SQLite文件的出现是红色的鲱鱼。我的代码的真正问题是我正在调用的MS MobileServiceSQLLiteStore包装器中的一行:
MobileServiceClient.EnsureFileExists(dbPath);
这最终解决了
if (!File.Exists(path)) File.Create(path);
正如this堆栈溢出答案指出的那样,File.Create()将使文件保持锁定状态。所以我的解决方法是确保文件空的,未锁定的文件事先存在:
if (File.Exists(path)) File.Delete(path);
File.Create(path).Close();