Если я правильно понимаю ваш фрагмент кода, вы используете lock
для объекта в локальной области видимости.Это будет означать, что другие потоки будут lock
для другого объекта.
Попробуйте определить глобальную блокировку, например, так:
static readonly object DatabaseLock = new object()
и затем использовать lock(DatabaseLock)
везде, где вы получаете доступ к базе данных.