在使用System.Data.SQLite创建和访问SQLite数据库的my EF6 recreation this walkthrough中,我发现对数据库的任何访问都会使数据库文件的文件句柄保持打开状态。处理了我创造的唯一一次性物品:DbContext。
这可以防止我在完成数据库文件时删除数据库文件(例如,在单元测试结束时,或者当我的应用程序的用户请求时)。
您可以看到我对DbContext
的使用有多简单以及关闭后File.Delete
失败的方式:
using (var context = new ChinookContext())
{
var artists = from a in context.Artists
where a.Name.StartsWith("A")
orderby a.Name
select a;
foreach (var artist in artists)
{
Console.WriteLine(artist.Name);
}
}
// I've disposed of the DbContext. All handles to the sqlite database file SHOULD
// have been released by now.
// Yet, this next line fails because the file is still locked.
File.Delete("Chinook_Sqlite_AutoIncrementPKs.sqlite");
(full project context on github)
为了关闭文件句柄,我缺少什么想法?
顺便说一句,我知道FAQ #22 on file locks仅在处理命令,数据阅读器等时被释放,但我自己没有打开任何这些,所以我不知道如何处置他们。