我正在为 .Net 和 .Net Framework 4.0 的 EntityFramework 使用 SQLite。一切都很好,直到我从 SQLite v.1.0.79.0 迁移到 v.1.0.86.0。从那时起这样的代码
using (var context = new EntityContent(sqliteConnectionString))
{
context.ExecuteStoreCommand(mySqlScriptString);
/*
* or do some stuff with context entities and call context.SaveChanges()
*/
}
deleteSQLiteDbFile(getDbFilePath(sqliteConnectionString)); // <-- here is the error
抛出错误 System.IO.IOException:“该进程无法访问文件 'mydatabase.dat',因为它正被另一个进程使用。”
这完全是因为迁移到 SQLite v.1.0.82.0 中的新 sqlite3_close_v2() API(请参阅this)。正如您在这张票中看到的,您应该正确处理所有 sqlite 命令和阅读器。但是 EF 4 并没有这样做(至少在 .net framework 4 版本中)。例如,参见ObjectContent.ExecuteStoreCommand
方法。它隐式地从 SQLite 连接创建一个命令并且不释放它。
是的,我可以编写自己的executeStoreCommand(ObjectContent context, string script, params object[] parameters)
方法并使用适当的命令处理,但是该怎么办context.SaveChanges()
?
有人知道它是否在 EF 或 SQLite 的下一个版本中修复了吗?或者可能有任何解决方法?