5

我的表有两列CreatedByCreateTime. 在我的视图表单中,我没有这些字段。现在,当我使用 ASP.NET MVC4 Edit (post) 方法更新记录时,这些列设置为 null。但我想保留这些价值观。我知道在我的编辑(发布)方法中,我可以从数据库中检索记录并手动设置这些记录。但我想知道是否可以要求实体框架不要更改这些字段的值。

4

3 回答 3

3

不,您不能,如果要保留旧值,则必须先获取记录,然后手动分配要更新的值。唯一的另一种方法是逐个属性和标记要修改的实体属性,如下所示:

db.MyEntity.Attach(myEntity);
db.Entry(myEntity).Property(e => e.MyProperty).IsModified = true;
db.SaveChanges();

无论哪种方式,您最终都必须自己做手工工作。

于 2013-08-13T19:52:27.497 回答
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();
于 2013-08-14T07:35:30.773 回答
0

你当然可以。我假设它们已经在您的模型中,只需将它们添加到带有Html.HiddenFor(m => m.createdBy). 现在它们在表单中但未显示,并且在 Post 方法上仍然具有值。

于 2013-08-13T21:26:45.200 回答