如何同步访问数据库,一次一个线程

时间:2018-10-04 20:08:00

标签: c# database entity-framework-6 locking

我用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)。

有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

使用后您是否要断开连接?

lock (_lockObj)
{
    using (MyEntities context = new MyEntities)
    {
        // do stuff
        context.SaveChanges();
    }
}