【问题标题】:How to update a record in database in Entity Framework?如何在实体框架中更新数据库中的记录?
【发布时间】:2016-11-04 20:08:37
【问题描述】:

我正在使用带有 EF 的 c# mvc,并且正在构建一个网站。当我使用新值更新表时,会出现以下错误。

{"违反 PRIMARY KEY 约束 'PK_Table_1_1'。无法在对象 'dbo.User' 中插入重复键。重复键值为 (shan@gmail.com)。\r\n语句已终止。"}

这是我设计的桌子。

这是我的控制器文件

[HttpPost]
    public ActionResult Manage(ManageViewModel manageviewmodel)
    {
        TheFoodyContext db = new TheFoodyContext();
        string UserEmail = Session["UserEmail"].ToString();
        User user_to_update = db.Users.Find(UserEmail);

        if (ModelState.IsValid)
        {

            try
            {
                HttpPostedFileBase photo = Request.Files["photo"];

            if (photo != null && photo.ContentLength > 0)
            {
                var path = "";
                var fileName = Path.GetFileName(photo.FileName);
                var extension = Path.GetExtension(photo.FileName);
                var allowedExtensions = new[] {".Jpg", ".png", ".jpg", "jpeg"};
                if (allowedExtensions.Contains(extension))
                {
                    string name = Path.GetFileNameWithoutExtension(fileName);
                    string myfile = name + "_" + UserEmail + extension;
                    path= Path.Combine(Server.MapPath("~/Img"), myfile);
                    photo.SaveAs(path);
                    user_to_update.photo = myfile;

                }
                else
                {
                    ViewBag.message = "Please choose only Image file";
                }


                user_to_update.email = UserEmail;
                user_to_update.fname = manageviewmodel.FirstName;
                user_to_update.lname = manageviewmodel.LastName;
                user_to_update.phone = manageviewmodel.Phone;
                user_to_update.address = manageviewmodel.Address;
                user_to_update.city = manageviewmodel.City;
                user_to_update.postcode = Convert.ToDecimal(manageviewmodel.PostCode);
                user_to_update.district = manageviewmodel.District;
                user_to_update.user_type = manageviewmodel.UserType;
                user_to_update.status = manageviewmodel.Status;
                user_to_update.photo = path;

                db.Users.Add(user_to_update);
                db.SaveChanges();

                Session["UserEmail"] = UserEmail;
                Session["FirstName"] = manageviewmodel.FirstName;
                Session["LastName"] = manageviewmodel.LastName;
                Session["Address"] = manageviewmodel.Address;
                Session["City"] = manageviewmodel.City;
                Session["PostCode"] = manageviewmodel.PostCode;
                Session["District"] = manageviewmodel.District;
                Session["UserType"] = manageviewmodel.UserType;
                Session["Status"] = manageviewmodel.Status;
                Session["Phone"] = manageviewmodel.Phone;
                return RedirectToAction("Manage");
            }
            }
            catch (Exception ex)
            {
             return View(ex.Message);
            }
            return View(manageviewmodel);
            }

            return View(manageviewmodel);

        }

这是我的模型文件

public class ManageViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    public string photo { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public int PostCode { get; set; }
    public string District { get; set; }
    public string UserType { get; set; }
    public string Status { get; set; }
}

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    您不需要再次添加用户(它已经存在并且 EF 会跟踪更改),只需调用 SaveChanges 即可。
    只需删除此行:

    db.Users.Add(user_to_update);
    

    它应该可以工作(除非有更多错误)。

    【讨论】:

    • 为什么投反对票?您不能添加已存在的实体。它将具有相同的密钥并说明 OPs 异常
    • @Manfred Radlwimmer 非常感谢。它就像一个魅力。 :)
    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多