假设我的实体类上有一堆布尔属性public bool isActive
等。这些值将通过在 Web 应用程序中设置复选框来操作。我将一次只发回一个更改的名称/值对和主键,比如说 { isActive : true , NewsPageID: 34 }
,默认模型绑定器将创建一个仅设置这两个属性的 NewsPage 对象。现在,如果我运行下面的代码,它不仅会更新已在模型绑定器创建的 NewsPage 对象上设置的属性的值,而且当然还会尝试将现有实体对象的所有其他未设置值设为空,因为它们未在模型绑定器创建的 NewsPage 对象上设置。
是否有可能以某种方式告诉实体框架不要查看设置为 null 的属性并尝试将这些更改持久化回检索到的实体对象并因此保留到数据库?也许我可以编写一些代码,它们只会利用模型绑定器创建的 NewsPage 对象上的非空值及其属性名称,并且只尝试更新那些特定的属性?
[HttpPost]
public PartialViewResult SaveNews(NewsPage Np)
{
Np.ModifyDate = DateTime.Now;
_db.NewsPages.Attach(Np);
_db.ObjectStateManager.ChangeObjectState(Np, System.Data.EntityState.Modified);
_db.SaveChanges();
_db.Dispose();
return PartialView("MonthNewsData");
}
我当然可以做类似下面的事情,但我觉得这不是最佳解决方案。特别是考虑到我需要设置 6 个布尔属性。
[HttpPost]
public PartialViewResult SaveNews(int NewsPageID, bool isActive, bool isOnFrontPage)
{
if (isActive != null) { //Get entity and update this property }
if (isOnFontPage != null) { //Get entity and update this property }
}