Как синхронизировать доступ к базе данных, по одному потоку за раз - PullRequest
0 голосов
/ 04 октября 2018

Я разработал службу Windows на C #, которая получает события от внешнего оборудования.Для каждого полученного события база данных 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 голосов
/ 04 октября 2018

Используете ли вы свое подключение после использования?

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