我正在使用 MVC3 和 EF4 编写 Web 应用程序。我正在使用如下所示的操作标头来捕获用户提交的表单值。
<HttpPost()>
Public Function Edit(ByVal prod as Product) As ActionResult
我使用下面的代码来更新记录。
db.Attach(prod)
db.ObjectStateManager.ChangeObjectState(prod, EntityState.Modified)
db.SaveChanges()
我在数据库中更新了 prod 对象中的提交值。问题是有些用户不允许修改产品中的某些字段,比如 ProductCost。我已禁用 HTML 中此类字段的文本框。但由于它是客户端,用户可以使用 Firebug 等工具轻松启用它并修改值。
我能想到的唯一解决方案是从数据库中检索现有记录并将其 ProductCost 值复制到 prod.ProductCost 中。但我不喜欢为实现这一目标而发起查询。有没有更好的方法来实现这一目标?
编辑:我找到了以下链接来更新特定字段。如何使用实体框架只更新一个字段?
您可以使用以下代码修改特定字段。
context.ObjectStateManager.GetObjectStateEntry(user).SetModifiedProperty("FieldName");
现在的问题是我是否必须为用户能够修改的每个字段编写上述语句?如果是,假设 Product 模型有 10 个字段(1 个主键),并且允许用户修改除主键之外的所有字段,我需要编写 9 条语句?有没有一种方法可以一次指定多个属性。或者甚至更好的是您指定未修改的属性。(注意:我知道我可以在字段名称数组上运行循环以避免编写 9 条语句。我要求另一种方法而不是重构上述方法)