【问题标题】:Why is my record being deleted from the db when I attempt to update the record from entity framework MVC?当我尝试从实体框架 MVC 更新记录时,为什么我的记录会从数据库中删除?
【发布时间】:2017-01-06 21:44:42
【问题描述】:

当我尝试从实体框架更新记录时,该记录正在从表中删除。没有抛出任何错误,所以我真的很困惑正在发生的事情。

我对实体框架和 asp.net 还很陌生。我已经学习了大约一个月了。

我可以从 SQL Server 更新记录而不会出现任何问题,但不能从 vs 更新记录。这是更新数据库的代码:

 // GET: /Scorecard/Edit/5
    public ActionResult Edit(int id, string EmployeeName)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }


        CRS_Monthly crs_monthly = GetAgentById(id);

        crs_monthly.EmployeeName = EmployeeName;

        if (crs_monthly == null)
        {
            return HttpNotFound();
        }

        return View(crs_monthly);
    }

    // POST: /Scorecard/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include="REC_ID,Cur_Plan,Plan_Update,Comments,Areas_Improve,Strengths,UPDATED_BY,UPDATED_TIME,Agent_Recognition")] CRS_Monthly crs_monthly)
    {
        if (ModelState.IsValid)
        {
            crs_monthly.UPDATED_TIME = DateTime.Now;
            crs_monthly.UPDATED_BY = Request.LogonUserIdentity.Name.Split('\\')[1];
            db.Entry(crs_monthly).State = EntityState.Modified;  
            db.SaveChanges();

            return RedirectToAction("Index");
        }
        return View(crs_monthly);
    }

当我运行调试器时,crs_monthly 是有效的并且在 db.SaveChanges() 之前看起来很好。非常感谢任何帮助!

【问题讨论】:

  • 那么,比如你前后运行SELECT COUNT(*),表中少了一条记录?也许它被更新为意想不到的东西而不是被删除

标签: sql asp.net-mvc entity-framework


【解决方案1】:

您应该永远保存从帖子创建的实体实例,尤其是当您使用Bind 来限制从帖子数据绑定的属性时。相反,始终从数据库中提取新实体并将发布的值映射到它。这样可以确保不会丢失任何数据。

无论如何,使用Bind 是一种可怕的做法。它的主要问题是您的所有属性都列为字符串值,并且您正在引入维护问题。如果删除这些属性之一或更改名称,Bind 列表不会自动更新。您必须记住更改每个实例。更糟糕的是,如果您添加属性,您必须记住返回并将它们包含在此列表中,否则您的数据会在没有通知的情况下被静默删除。

如果您只需要使用实体上的一部分属性,请创建一个仅包含这些属性的视图模型。然后,再次将视图模型中发布的值映射到从数据库中提取的新实体实例。

【讨论】:

  • 非常感谢。我正在自学,所以我不知道实体框架的所有最佳实践。我听从了你的建议,现在一切都在正常更新。我很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多