0

我有以下 Asp.Net MVC 4 脚手架代码。

    //
    // POST: /Detail/Edit/5

    [HttpPost]
    public ActionResult Edit(Detail detail)
    {
        var dd = Details.FirstOrDefault(d => d.DetailId == detail.DetailId);
        if (dd == null)
        {
            return HttpNotFound();
        }

        detail.UpdatedBy = User.Identity.Name;
        detail.UpdateTime = DateTime.Now;
        if (ModelState.IsValid)
        {
            _db.Entry(detail).State = EntityState.Modified;
            _db.SaveChanges();
            return RedirectToAction("Index", new { id = detail.MasterId });
        }
        return View(dealDetail);
    }

但是,该行_db.Entry(detail).State = EntityState.Modified;引发以下错误。更新主/细节编辑风景的细节线的正确方法是什么?

ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

4

1 回答 1

3

这一行:

var dd = Details.FirstOrDefault(d => d.DetailId == detail.DetailId);

将导致从数据库加载 Detail 实体。现在您有两个具有相同 ID 的详细信息,但只有一个(由该查询加载的那个)可用于持久性。您可以将代码更改为:

if (!Details.Any(d => d.DetailId == detail.DetailId))
{
    return HttpNotFound();
}

或更新附加的详细信息 ( dd),例如:

// All values of detail entity must be set in your HTTP post! 
_db.Entry(dd).CurrentValues.SetValues(detail);    
于 2013-03-26T08:41:13.107 回答