更新EF 4.0中的单个值

时间:2013-04-11 12:41:17

标签: linq entity-framework asp.net-mvc-4 entity-framework-4

我正在使用MVC应用程序并使用Entity Framework 4.0进行数据库连接。虽然编辑记录我想更新表中的某些字段。编辑代码是

   [HttpPost]
    public ActionResult Edit(ProjectActivityDetail projectactivitydetail, FormCollection formcollection)
    {
        if (ModelState.IsValid)
        {
            string value = Request["ChkIntBool"];
            if (value.Substring(0, 4) == "true") { projectactivitydetail.IsApproved = 1; } else { projectactivitydetail.IsApproved = 0; }
            projectactivitydetail.ProjectActivityDID = long.Parse(Session["ProjectActivityDID"].ToString());
            projectactivitydetail.UpatedBy = long.Parse(Session["UserID"].ToString());
            projectactivitydetail.UpdatedON = System.DateTime.Now;
            db.Entry(projectactivitydetail).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.FK_ProjectActivityID = new SelectList(db.ProjectActivityMasters, "ProjectActivityID", "ActivityName", projectactivitydetail.FK_ProjectActivityID);
        return View(projectactivitydetail);
    }

我只想更新这些字段但是当这个执行时我的其他字段更新为null,有什么办法可以保存这些值,并在数据库表中更新这些值。请帮助

2 个答案:

答案 0 :(得分:0)

看起来传递给服务调用的实体不完整。我的建议是找到现有实体并对其进行更改而不是附加传入的实体:

[HttpPost]
public ActionResult Edit(ProjectActivityDetail projectactivitydetail, FormCollection formcollection)
{
    if (ModelState.IsValid)
    {
        //I'm assuming the PK of the entity is id so adjust for that
        var entity = db.Set<ProjectActivityDetail>().Find(projectactivitydetail.id);
        string value = Request["ChkIntBool"];
        entity.IsApproved = value.Substring(0, 4) == "true" ? 1 : 0;
        entity.ProjectActivityDID = long.Parse(Session["ProjectActivityDID"].ToString());
        entity.UpatedBy = long.Parse(Session["UserID"].ToString());
        entity.UpdatedON = System.DateTime.Now;
        db.Entry(entity).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    ViewBag.FK_ProjectActivityID = new SelectList(db.ProjectActivityMasters, "ProjectActivityID", "ActivityName", projectactivitydetail.FK_ProjectActivityID);
    return View(projectactivitydetail);
}

答案 1 :(得分:0)

是的,有办法。使用要在模型上保留的数据向视图添加隐藏字段,在这种情况下ProjectActivityDetail,这样属性将绑定到模型绑定阶段上的projectactivitydetail变量。

假设您添加了一个名为CreatedOn的属性,该属性被设置为null:

@Html.HiddenFor(model => model.CreatedOn)

然后,当您提交表单时,CreatedOn上最初的值将绑定到projectactivitydetail的属性,您的模型将保存得很好。您的字段将更新为null,因为模型绑定未找到任何值。

祝你好运。