Linq 更新EF 4.0中的单个值

Linq 更新EF 4.0中的单个值,linq,entity-framework,asp.net-mvc-4,entity-framework-4,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) { str

我正在开发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,是否有任何方法可以保持这些值不变并更新数据库表中的许多值。请帮助

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

[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);
}
[HttpPost]
公共操作结果编辑(ProjectActivityDetail ProjectActivityDetail、FormCollection FormCollection)
{
if(ModelState.IsValid)
{
//我假设实体的PK是id,所以对此进行调整
var entity=db.Set().Find(projectactivitydetail.id);
字符串值=请求[“ChkIntBool”];
entity.IsApproved=value.Substring(0,4)=“true”?1:0;
entity.ProjectActivityDID=long.Parse(会话[“ProjectActivityDID”].ToString());
entity.UpatedBy=long.Parse(会话[“UserID”].ToString());
entity.UpdatedON=System.DateTime.Now;
db.Entry(entity.State=EntityState.Modified;
db.SaveChanges();
返回操作(“索引”);
}
ViewBag.FK_ProjectActivityID=新建选择列表(db.ProjectActivityMasters,“ProjectActivityID”,“ActivityName”,projectactivitydetail.FK_ProjectActivityID);
返回视图(projectactivitydetail);
}

是的,有办法。将隐藏字段添加到视图中,其中包含要保留在模型上的数据,在本例中为
ProjectActivityDetail
,这样属性将绑定到模型绑定阶段的
ProjectActivityDetail
变量

假设您有一个名为
CreatedOn
的属性,该属性被设置为null,则在视图上添加:

@Html.HiddenFor(model => model.CreatedOn)
然后,当您提交表单时,最初在
CreatedOn
上的值将绑定到
projectactivitydetail
上的属性,您的模型将很好地保存。您的字段正在更新为null,因为模型绑定找不到它们的任何值


祝你好运。

调试代码时,对象是否包含非空值(即,当对象被传递到方法中时)?