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

发布于 2024-08-04 02:04:54 字数 1274 浏览 1 评论 0原文

有人可以检查一下这段代码吗?我真的不明白为什么当我尝试更新记录时会违反唯一性。用于创建新记录的代码工作得很好,但是当我尝试使用它来更新时,它指出了违规。

控制器:

    [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();
    }

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

非常感谢您并祝愿您最诚挚的问候。 :)

Can someone please check out this code, i really dont understand why i got violation of unique when i try to update an record. the code used to create new record work just fine, but when i try to use it to update, it called out violation.

Controller:

    [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();
    }

and i got an error:

Unable to refresh the specified
object. The object no longer exists
in the database.

when i try to change the userRepo like this for testing purpose.

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

Im wondering if there anyone on this board can find out if i am wrong somewhere in this problem :).

Thank you very much and wish you best regard. :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱,才寂寞 2024-08-11 02:04:54

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

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

Looks like you have conflicts to resolve even though you're telling it to "KeepCurrentValues", try this before the submit changes...

foreach(ObjectChangeConflict conflict in usersTable.Context.ChangeConflicts)
{
    foreach(MemberChangeConflict memberConflict in conflict.MemberConflicts)
    {
        memberConflict.Resolve(RefreshMode.KeepCurrentValues);
    }
}
叹沉浮 2024-08-11 02:04:54

忽略模型绑定上的 ID。

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

善良,

Ignore ID on your model binding.

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

Kindness,

Dan

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文