Entity Framework - чтение блокировки записи - PullRequest
4 голосов
/ 07 июля 2011

Я звоню в одну и ту же базу данных из различных приложений , используя Entity Framework.Однако, когда одно приложение читает / обновляет запись, я не хочу, чтобы другие приложения считывали эти данные.

Я пробовал использовать следующий пример кода;однако они по-прежнему могут читать записи.

Любые предложения ИЛИ другие подходы будут высоко оценены!

using (Entities context = new Entities(ConnectionString))
{
    DBTable entity;

    do
    {
        entity = context.DBTable
            .Where(item => item.IsLock == false)
            .FirstOrDefault();

        if (entity != null)
        {
            // Map entity to class
            ......


            // Lock the record; it will be unlocked later by a calling method.
            entity.IsLock = true;
            context.SaveChanges();

            count++;
        }

    } while (entity != null && count < 100);
}

Отредактировано: в основном я читаю запись и что-то делаюзаймет много времени).Затем обновите запись с флагом успеха / сбоя (если сбой другой может сделать это снова).Я не хочу, чтобы другие приложения выполняли задачу успешно несколько раз.

1 Ответ

5 голосов
/ 12 июля 2011

Перенесено из комментария к ответу:

Если вы не против исправить это с помощью SQL, создайте хранимую процедуру. В хранимой процедуре выполните SELECT для записи WITH UPDLOCK ( см. Здесь информацию о табличных подсказках ). После SELECT обновите запись до IsLock. Это предотвращает любой другой процесс от чтения данных, пока вы проверяете / устанавливаете поле IsLock.

Надеюсь, что поможет

...