Блокировка Firebird с помощью EntityFramework

#entity-framework #firebird

#entity-framework #firebird

Вопрос:

Я создал простое приложение WinForms, которое подключается к серверу Firebird с помощью EntityFramework. База данных содержит только одну таблицу с 4 полями (Id, имя, фамилия, Email). Когда я параллельно запускаю другой запрос для обновления другого поля, я получаю исключение с сообщением «конфликт блокировки при транзакции без ожидания». Это специфичное поведение EF или мне нужно настроить сервер firebird для блокировки на уровне поля использования?

Ответ №1:

Вы получаете эту ошибку, если одновременно обновляете одну и ту же строку в нескольких транзакциях. В Firebird нет такой вещи, как блокировка на уровне поля, поскольку строка в целом является версионной.

Единственные доступные вам решения: не делайте этого, обновите все поля в одном запросе, добавьте механизм повторных попыток или не запускайте обновления разных полей параллельно.