1

我的 MVC 操作方法接收默认模型绑定器从表单集合数据创建的实体对象(页面)。有些字段是错误的或空的,因为它们没有在请求中发送到服务器,例如我不发送“ CreateDate”,并且默认模型绑定器将此属性设置为一些我不需要的默认值。

一旦附加了对象,它当然会尝试将所有值(包括无效/不需要的值保存到数据库)。我当然可以在每个属性的基础上手动分配,但我想知道是否可以以某种方式标记一个属性,以便在 EntityState 设置为 modified 并调用 SaveChanges() 时它不会持久化。

public ActionResult SomeMethod(Page page)
{
page.ModifyDate = DateTime.Now;

       _db.NewsPages.Attach(page);
                _db.ObjectStateManager.ChangeObjectState(page, System.Data.EntityState.Modified);
                _db.SaveChanges();
                _db.Dispose();

}
4

1 回答 1

0

处理此问题的正确方法是使用不同的视图模型类,将空实体附加到上下文并为每个属性分配真实值(或让 AutoMapper 处理这种情况),正如@Darin 在评论中建议的那样。

如果您想按自己的方式行事,则不得更改 POCO 实体的状态,但必须更改每个已更改属性的状态:

public ActionResult SomeMethod(Page page)
{
    page.ModifyDate = DateTime.Now;

    _db.NewsPages.Attach(page);
    ObjectStateEntry entry = _db.ObjectStateManager.GetObjectStateEntry(page);
    entry.SetModifiedProperty("ChangedPropertyName");
    // Do the same for all other changed properties
    _db.SaveChanges();
    _db.Dispose();
}
于 2012-07-09T08:26:35.757 回答