Обработка параллелизма EF с атрибутом Timestamp в подходе Model First
-
12-12-2019 - |
Вопрос
Я пытаюсь реализовать решение, данное в Обработка параллелизма с помощью Entity Framework в приложении ASP.NET MVC .
В статье говорится:
Добавление свойства отслеживания к сущности отдела
В Models\Department.cs добавьте свойство отслеживания:
[Timestamp] public Byte[] Timestamp { get; set; }
Атрибут Timestamp указывает, что этот столбец будет включен в предложение Where команд обновления и удаления, отправляемых в базу данных.
Поскольку я использую сначала модель подход, я выполнил шаги 1–5, описанные в Создание столбца Timestamp с помощью Entity Framework
- Добавьте свойство с именем «Timestamp» к объекту в модели EF.
- Установите тип двоичный
- Установить значение NULL равным false
- Установите для StoreGeneratedPattern значение Computed.
- Установите для ConcurrencyMode значение «Фиксированный».
Когда я обновляю свой код из модели базы данных, Models\Department.cs теперь содержит
public virtual byte[] Timestamp
{
get;
set;
}
Затем я использовал класс метаданных, чтобы указать атрибут Timestamp:
// Metadata for Department entity
public class DepartmentMetadata
{
[Timestamp]
public byte Timestamp { get; set; }
}
Вопрос 1. Я проверил, является ли значение Timestamp
столбец меняется при редактировании строк.Это не так.
РЕДАКТИРОВАТЬ 1 Проблема возникла из-за того, что тип столбца SQL Server был binary
, где это должно было быть типа timestamp
.Изменение типа данных устранило проблему, из-за которой столбец Timestamp не обновлялся.
В2. Я пытался изменить один и тот же объект (используя «Открыть в новой вкладке»), чтобы увидеть, есть ли OptimisticConcurrencyException
брошен.Это не так.Что я делаю не так?Пожалуйста, помогите мне понять, спасибо.
Решение
Проблема возникла из-за того, что у меня был один ObjectContext для каждого сеанса HTTP, поэтому открытие новой вкладки и ее тестирование приводили к НЕТ вызвать исключение параллелизма.