我有一个问题,没有抛出OptimisticConcurrencyException,我有这个代码在我的HttpPost编辑上运行
[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,则events.Version和entry.Version具有不同的值,但不会抛出异常。
在我的.edmx文件中,Version属性设置为“StoreGeneratedPattern”= Computed and Concurrency Mode = Fixed。类型是时间戳(二进制)
阅读这篇文章OptimisticConcurrencyException Does Not Work in Entity Framework In Certain Situations,但这并没有真正揭示这个问题(我没有得到它)
编辑:.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;
}