У меня проблема с тем, что OptimisticConcurrencyException не генерируется, у меня есть этот код, который запускается на моем HttpPost Edit
[HttpPost]
public ActionResult Edit(IncidentViewModel incidentViewModel)
{
if(ModelState.IsValid)
{
Incident incident;
if (IncidentViewModel.TryParse(incidentViewModel, out incident))
{
Incident entry = _incidentManager.Find(entity => entity.Id == incident.Id);
if(incident.Version != entry.Version)
{
}
Если я затем открываю 2 браузера и принудительно запускаю OptimisticConcurrencyException, редактируя одновременно,для инцидента. Версия и запись. Версия имеет разные значения, но исключение НЕ выдается.
В моем файле .edmx для свойства Version задано значение "StoreGeneratedPattern" = вычислено и режим параллелизма = исправлено.Тип: метка времени (двоичная)
Прочитать этот пост OptimisticConcurrencyException не работает в Entity Framework в некоторых ситуациях , но это действительно не пролило свет на проблему (я не понял)
Редактировать: файл .edmx и контроллер, использующий его, находятся в 2 отдельных проектах, но одно и то же решение
Редактировать: Это мой метод обновления в моем менеджере
public virtual void Update(T updatedEntry)
{
if (updatedEntry == null) throw new ArgumentNullException("updatedEntry");
RequiredData(updatedEntry);
Repository.Update(updatedEntry);
Repository.Commit();
}
Обновление моего репозиторияи зафиксировать это:
public void Update(T entity)
{
object originalItem;
var key = Context.CreateEntityKey(Context.GetEntitySet<T>().Name, entity);
if (Context.TryGetObjectByKey(key, out originalItem))
{
Context.ApplyCurrentValues(key.EntitySetName, entity);
}
}
public int Commit()
{
var saveValue = Context.SaveChanges();
return saveValue;
}