我有一个 WebApi 应用程序,我正在研究一些 POST/PUT 方法,我正在尝试找出使用实体框架更新数据库中记录的最佳方法。
使用 WebApi 的主要问题是请求将仅具有完整对象的完整属性的子集。
例如,我有一个Site
对象,该对象具有Project
指向相关项目的导航对象。由于当前站点无法移动项目,因此我没有为 projectId 提供 PUT 命令,这意味着Project
对象Site
为空,这会在尝试更新时导致问题(即使声明该属性未修改),所以我被迫首先读取记录,然后合并更改,然后持久化,例如:
下面的例子很清楚,站点是作为参数传递给 PUT 路由的对象,所以在这种情况下是部分站点对象
//Grab the existing site
var dbSite = (from s in _repo
where s.Id == id
select s).FirstOrDefault();
//Update unchanged values
site.Id = id;
site.CreatedOn = dbSite.CreatedOn;
var entry = _uow.Entry(dbSite);
entry.Property(e => e.Code).IsModified = true;
entry.Property(e => e.Active).IsModified = true;
entry.Property(e => e.CreatedOn).IsModified = false;
_uow.Entry(dbSite).CurrentValues.SetValues(site);
//Commit
_uow.Commit();
有没有办法获取部分对象(没有设置某些导航属性)并更新数据库而不先加载它,或者是加载它并更新我目前正在做的方式的最佳方法?