ASP.net MVC中更新时违反唯一键约束

ASP.net MVC中更新时违反唯一键约束,asp.net,asp.net-mvc,linq-to-sql,repository-pattern,Asp.net,Asp.net Mvc,Linq To Sql,Repository Pattern,有人能检查一下这个代码吗,我真的不明白为什么我在尝试更新记录时违反了unique。用于创建新记录的代码工作正常,但当我尝试使用它进行更新时,它发出了违规 控制器: [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(User user) { if (ModelState.IsValid) { userRepository.SaveUser(user);

有人能检查一下这个代码吗,我真的不明白为什么我在尝试更新记录时违反了unique。用于创建新记录的代码工作正常,但当我尝试使用它进行更新时,它发出了违规

控制器:

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

    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();
    }
我想知道这个板上是否有人能找出我在这个问题上的错误:)


非常感谢,并祝您万事如意。:)

忽略模型绑定上的ID

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


Dan

看起来您需要解决冲突,即使您告诉它“KeepCurrentValues”,请在提交更改之前尝试此操作

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

这将不起作用,因为ID是Int,Int不是Int,Int不是可为null的类型,当然,如果将其设置为exclude,默认情况下它将为0。如果为0,将创建新记录,而不是更新记录。:)