我的表格有两列CreatedBy
和CreateTime
。在我的视图中,我没有这些字段。现在,当我使用ASP.NET MVC4 Edit(post)方法更新记录时,这些列将设置为null。但我想保留这些价值观。我知道在我的Edit(post)方法中,我可以从数据库中检索记录并手动设置它们。但我想知道我是否可以要求实体框架不要更改这些字段的值。
答案 0 :(得分:3)
不,你不能,如果你想保留旧值,那么你必须先获取记录,然后手动分配你想要更新的值。唯一的另一种方法是通过属性遍历您的实体属性并标记您要修改的属性,如下所示:
db.MyEntity.Attach(myEntity);
db.Entry(myEntity).Property(e => e.MyProperty).IsModified = true;
db.SaveChanges();
无论哪种方式,您最终都必须自己完成手动工作。
答案 1 :(得分:2)
你必须在这里做出选择:
1)正如@KennyZ所提到的那样,将@Html.HiddenFor()
添加到视图中的某个位置,然后添加到表单中:
@Html.HiddenFor(m => m.CreatedBy)
@Html.HiddenFor(m => m.createTime)
2)您可以手动更新该实体并将这两个属性保留下来:
var ent = dbctx.Entities.Find(model.ID);
ent.Prop1 = model.Prop1;
// ... also for other properties except those two property
dbctx.SaveChanges();
答案 2 :(得分:0)
当然可以。我假设它们已经在您的模型中,只需将它们添加到Html.HiddenFor(m => m.createdBy)
的表单中即可。现在它们处于表单中但未显示,并且仍然具有Post方法的值。