【问题标题】:"Violation of PRIMARY KEY constraint 'PK__UserRights__0155B971'. Cannot insert duplicate key in object 'dbo.UserRights'. error“违反主键约束'PK__UserRights__0155B971'。无法在对象'dbo.UserRights'中插入重复键。错误
【发布时间】:2016-05-13 05:31:29
【问题描述】:

您好,我正在尝试更新操作,但是在更新它时显示靠近 db 的错误。保存更改()。

它显示了下面提到的错误

EntityFramework.dll 中出现“System.Data.Entity.Infrastructure.DbUpdateException”类型的异常,但未在用户代码中处理

所以我在内部异常中进行了搜索。它显示了下面提到的错误。

“违反 PRIMARY KEY 约束 'PK__UserRights__0155B971'。无法在对象 'dbo.UserRights' 中插入重复键。\r\n语句已终止。”}

我的控制器代码

   public ActionResult UsetBasedAuthenticationEditSave(UserAuthenticationViewModel objuavm )
    {
        ViewBag.UserID = new SelectList(db.UserDetails, "UserID", "UserName", objuavm.UserID);
        ViewBag.ModuleID = new SelectList(db.UserModules, "ModuleID", "ModuleName", objuavm.ModuleID);
        ViewBag.SubModule = new SelectList(db.UserModules, "SubModule", "SubModule", objuavm.SubModule);

        var objuserrightsresult = db.UserRights.Find(objuavm.UserRitsID);
        if(objuserrightsresult!=null)
        {
            objuserrightsresult.UserID = objuavm.UserID;
            objuserrightsresult. ModuleID = objuavm.ModuleID;
            objuserrightsresult. Toview = Convert.ToBoolean(objuavm.Toview);
            objuserrightsresult. ToAdd = Convert.ToBoolean(objuavm.ToAdd);
            objuserrightsresult. ToEdit = Convert.ToBoolean(objuavm.ToEdit);
            objuserrightsresult. ToDelete = Convert.ToBoolean(objuavm.ToDelete);
            objuserrightsresult.IsActive = Convert.ToBoolean(objuavm.IsActive);
            objuserrightsresult.IsDeleted = Convert.ToBoolean(objuavm.IsDeleted);
            objuserrightsresult. EditedDate = DateTime.Now;
            objuserrightsresult. LastActiveOn = DateTime.Now;
            objuserrightsresult. RowID = Guid.NewGuid();
            objuserrightsresult. CreatedSeesionID = Guid.NewGuid();
            objuserrightsresult. EditedSessionID = Guid.NewGuid();
            objuserrightsresult. OfflineMode = false;
            objuserrightsresult.OfflineID = Guid.NewGuid();
            objuserrightsresult.SubModule = objuavm.SubModule;
            db.UserRights.Add(objuserrightsresult);
           }
        db.SaveChanges();
        return RedirectToAction("UserBasedAuthenticationIndex");
    }

【问题讨论】:

  • 您添加了现有实体。你只需要更新它(删除行db.UserRights.Add(objuserrightsresult);
  • 好的,斯蒂芬让我试试
  • 斯蒂芬它的工作你能解释一下我犯了什么错误
  • 您使用db.UserRights.Find(objuavm.UserRitsID); 获取现有实体并由上下文跟踪它,因此当您更新其属性时,您只需要调用SaveChanges()(您不能再次添加它,因为它已经存在) .另请参阅 Rosdi Kasim 添加的答案

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


【解决方案1】:

评论这一行:

//db.UserRights.Add(objuserrightsresult);

由于您正在执行 UPDATE,因此您不应该再次添加它...只需更新字段值,然后调用 db.SaveChanges();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 2021-05-08
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多