存储更新,插入或删除语句会影响意外。自实体加载后修改或删除的实体

时间:2015-02-01 13:14:58

标签: c# asp.net-mvc entity-framework asp.net-mvc-4

我正在将MVC用于我的项目。

我添加了一个名为group的控制器,在这个控制器中,我有一些像往常一样的动作,如创建编辑等。

但我的问题涉及edit方法正如您在此处所见:

public ActionResult Edit(int GroupId)
{
    ViewBag.groupIdLST = new SelectList(OBJgroupRepository.FindBy(i => i.GroupId == null).ToList(), "Id",
    ViewBag.GroupType = new SelectList(OBJgroupRepository.FindBy(i => i.GroupId == null).ToList(), "name",
    DomainClass.Group tg = OBJgroupRepository.FindBy(i => i.Id == GroupId).First();
    return View(tg);
}
[HttpPost]
public ActionResult Edit(Group gr)
{
    if (ModelState.IsValid)
    {
        OBJgroupRepository.Edit(gr);
        OBJgroupRepository.Save();
    }
    TempData["success"] = "اطلاعات با موفقیت ویرایش شد";
    return RedirectToAction("Create");
}

当我点击编辑按钮时出现此错误:

  

存储更新,插入或删除语句会影响意外   行数(0)。自那以后,实体可能已被修改或删除   实体已加载。看到   http://go.microsoft.com/fwlink/?LinkId=472540了解有关的信息   理解和处理乐观并发异常。

我的编辑和保存方法:

public virtual void Edit(T entity)
{
    _entities.Entry(entity).State = System.Data.Entity.EntityState.Modified;
}

public virtual void Save()
{
    try
    {
        _entities.SaveChanges();
    }
    catch (DbEntityValidationException e)
    {
        foreach (var eve in e.EntityValidationErrors)
        {
            Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                eve.Entry.Entity.GetType().Name, eve.Entry.State);
            foreach (var ve in eve.ValidationErrors)
            {
                Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                    ve.PropertyName, ve.ErrorMessage);
            }
        }
        throw;
    }
}

我的存储库:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DomainClass;
using ProjectModel;

namespace Repository
{
    public class GroupRepository : GenericRepository<DataAccessModelContainer, Group>
    {
    }
}

可根据要求提供任何详细信息。

最好的问候。

2 个答案:

答案 0 :(得分:4)

问题在于:

OBJgroupRepository.Edit(gr);
OBJgroupRepository.Save();

你曾两次致电OBJgroupRepository!这会导致线程之间的竞争条件(以及随后的并发性考虑)。 尝试在编辑中使用保存方法内容。

答案 1 :(得分:1)

我知道这已经很晚了,但今天发生在我身上,我无法弄清楚原因。我首先使用代码,不得不对主键进行重大更改。当我这样做时,我开始得到同样的错误。我调查了大约2个小时,最后发现我试图将数据插入主键。我想我会让人们知道这可能是你可以得到这个错误的原因。