在ASP.net MVC中更新违反UNIQUE KEY约束

时间:2009-09-04 14:55:37

标签: asp.net asp.net-mvc linq-to-sql repository-pattern

有人可以查看这段代码,我真的不明白为什么我在尝试更新记录时违反了独特性。用于创建新记录工作的代码就好了,但是当我尝试使用它进行更新时,它会调用违规行为。

控制器:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(User user)
    {
        if (ModelState.IsValid)
        {
            userRepository.SaveUser(user);
            return RedirectToAction("List");
        }
        else
            return View("Edit");
    }

userRepo:

    public void SaveUser(User user)
    {
        user.LAST_ACTIVITY = DateTime.Now;
        if (user.USER_ID != 0)
        {
            usersTable.Attach(user);
            usersTable.Context.Refresh(RefreshMode.KeepCurrentValues, user);
        }
        else
        {
            usersTable.InsertOnSubmit(user);
        }
        usersTable.Context.SubmitChanges();
    }

我收到了一个错误:

  

无法刷新指定的内容   宾语。该对象不再存在   在数据库中。

当我尝试像这样更改userRepo以进行测试时。

    public void SaveUser(User user)
    {
        user.LAST_ACTIVITY = DateTime.Now;
        usersTable.Attach(user);
        usersTable.Context.Refresh(RefreshMode.KeepCurrentValues, user);
        usersTable.Context.SubmitChanges();
    }

我想知道这个问题上是否有人能够在这个问题的某个地方找出我是错的:)。

非常感谢,并祝你最好。 :)

2 个答案:

答案 0 :(得分:1)

即使您将其告知“KeepCurrentValues”,看起来您仍有解决冲突,请在提交更改之前尝试此操作...

foreach(ObjectChangeConflict conflict in usersTable.Context.ChangeConflicts)
{
    foreach(MemberChangeConflict memberConflict in conflict.MemberConflicts)
    {
        memberConflict.Resolve(RefreshMode.KeepCurrentValues);
    }
}

答案 1 :(得分:-1)

忽略模型绑定上的ID。

[Bind(Exclude= "Id")]
public ActionResult Edit(User user)

善,