我用C#开发了Windows服务,该服务从外部硬件接收事件。对于每个收到的事件,SQLite数据库都会创建一条记录并将其保存。
问题在于,有时会发生DBLock错误,因此我需要控制一次只能将一个线程写入数据库。
我创建了在Service OnStart方法中实例化的此类变量:
private DataWare.monitorEntities _db;
然后,如果我有:
void driver_Transaccion(object sender, AttendanceReader.MarcacionEventArgs e)
{
lock (_db)
{
/* Code that creates a record a does some other actions */
/* ......... */
_db.SaveChanges();
}
}
问题是我继续收到DBLock异常,因此似乎未考虑指令锁(_db)。
有什么帮助吗?
答案 0 :(得分:0)
使用后您是否要断开连接?
lock (_lockObj)
{
using (MyEntities context = new MyEntities)
{
// do stuff
context.SaveChanges();
}
}