Любой разработчик доступа к данным сталкивается с трудностями, отвечая на вопрос о параллелизме данных: «Что произойдет, если несколько человек одновременно редактируют одни и те же данные?»
-
Более удачливые среди нас имеют дело с бизнес-правилами, которые говорят: «Нет проблем, последний выигрывает».
-
В этом случае параллелизм не является проблемой. Скорее всего, это не так просто, и нет серебряной пули, которая бы решала каждый сценарий одновременно.
-
По умолчанию Entity Framework выбирает путь «последний выиграл», что означает, что последнее обновление применяется, даже если кто-то обновил данные между временем получения данных и временем сохранения.
Более удачливые среди нас имеют дело с бизнес-правилами, которые говорят: «Нет проблем, последний выигрывает».
В этом случае параллелизм не является проблемой. Скорее всего, это не так просто, и нет серебряной пули, которая бы решала каждый сценарий одновременно.
По умолчанию Entity Framework выбирает путь «последний выиграл», что означает, что последнее обновление применяется, даже если кто-то обновил данные между временем получения данных и временем сохранения.
Давайте возьмем пример, чтобы понять это лучше. В следующем примере добавляется новый столбец VersionNo в таблице курса.
Перейдите к конструктору и щелкните правой кнопкой мыши в окне дизайнера и выберите модель обновления из базы данных …
Вы увидите, что в Entity Course добавлен еще один столбец.
Щелкните правой кнопкой мыши по вновь созданному столбцу VersionNo, выберите Properties и измените ConcurrencyMode на Fixed, как показано на следующем рисунке.
Если для параметра ConcurrencyMode of Course.VersionNo установлено значение Fixed, то при каждом обновлении курса команда Update будет искать его, используя свой EntityKey и свойство VersionNo.
Давайте посмотрим на простой сценарий. Два пользователя извлекают один и тот же курс в одно и то же время, и пользователь 1 меняет заголовок этого курса на Maths и сохраняет изменения перед пользователем 2. Позже, когда пользователь 2 меняет заголовок этого курса, который был получен до того, как пользователь 1 сохранит свои изменения, в этом В случае, если пользователь 2 получит исключение параллелизма «User2: Произошло исключение оптимистичного параллелизма» .