Используются ли TransactionScope в Entity Framework 4 в ситуациях, которые не охватывают несколько объектов контекста? - PullRequest
1 голос
/ 28 октября 2010

Я работаю над своим первым крупным проектом, использующим EF4, и размышлял над ситуациями параллелизма, поскольку я реализую определенные бизнес-сценарии. Я понимаю, что EF имеет встроенную поддержку оптимистичного параллелизма, установив режим параллелизма в значение Fixed для свойств объекта. Это кажется достаточным в большинстве случаев. Несколько вещей, которые меня интересуют:

  1. В ситуации, когда я сначала проверяю, что объект не существует, а затем вставляю объект. Технически, кто-то мог вставить эту сущность за долю секунды между моей проверкой и моей вставкой. Какова лучшая практика для обработки этого сценария с EF? Естественно, я думаю о двух возможных решениях: пессимистическом параллелизме или обработке уникального исключения ограничения, которое произойдет.

  2. Я пытаюсь вспомнить, приведет ли автоматическая блокировка задействованных таблиц к выдаче блока «Начать транзакцию / принятие транзакции в SQL», то есть это приведет к пессимистическому сценарию, о котором я говорил выше. Если это так, будет ли перенос этих двух операций EF в TransactionScope достигать аналогичных результатов?

  3. Если TransactionScope не будет вызывать пессимистический параллелизм, что будет?

1 Ответ

1 голос
/ 28 октября 2010
  1. Ограничение БД - это надежное решение only , поскольку это решение only , которое может видеть незафиксированные транзакции от других авторов.
  2. Donне предполагаю, что SQL Server блокирует таблицы.Это может быть блокировка строк.
  3. Затяжные, незафиксированные записи.Что обычно является плохой идеей для любой технологии доступа к данным.Вместо этого используйте ограничения.

Почему вы хотите использовать TransactionScope, когда не используется несколько контекстов?Ну, может быть, вам нужно получить сгенерированный сервером ключ в ходе одной транзакции (подумайте SCOPE_IDENTITY).Как правило, если у вас есть несколько вызовов на SaveChanges(), которые должны быть успешными или неуспешными как группа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...