我正在使用实体框架(.NET 4.0)和SQLite作为底层数据库,当我尝试向数据库提交一些更改时出现异常:
底层提供程序在提交时失败。
堆栈跟踪是:
System.Data.EntityException: The underlying provider failed on Commit. ---> System.Data.SQLite.SQLiteException: The database file is locked
database is locked
at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavi
or behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
at System.Data.SQLite.SQLiteTransaction.Commit()
at System.Data.EntityClient.EntityTransaction.Commit()
--- End of inner exception stack trace ---
at System.Data.EntityClient.EntityTransaction.Commit()
at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
at MySystem.MySystemService.UpdateFollowersAndUsers() in C:\Path\To\MySystem\MySystemService.cs:line 295
我的代码非常简单:
// Gets more followers for the competitor and updates the database
List<Follower> moreFollowers = GetMoreFollowers(competitor);
// Add the new followers to the database
using (MySystemEntities db = new MySystemEntities())
{
try
{
foreach (Follower f in moreFollowers)
{
db.AddToFollowers(f);
}
db.SaveChanges();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
这段代码位于MyService
内,它带有一批5,000个关注者,并且它获得了上述异常。但是,当我将相同的代码片段放入Main
函数并只手动添加一些关注者时,它不再抛出异常并且关注者已成功添加到我的数据库中。 显然数据库文件已被锁定,可能导致此问题的原因是什么?
答案 0 :(得分:1)
我刚刚在另一个问题中找到答案:'The database file is locked' with System.Data.SQLite
讽刺的是,OP也回答了他自己的问题:)。