尽管值不同,但不会抛出OptimisticConcurrencyException

时间:2011-10-27 09:30:28

标签: asp.net-mvc asp.net-mvc-3 entity-framework-4.1

我有一个问题,没有抛出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;
    }

0 个答案:

没有答案