1
我正在实现一个REST样式的API,允许一个对象被编辑为PATCH
。 PATCH
操作的目的是允许在不触及可能设置的其他属性的情况下更新类中的一个或多个属性。这是一个很好的PATCH格局
这些是ServiceStack OrmLite页面的部分更新示例,但它似乎需要硬编码来指示哪些字段将部分更新。在我的场景中,取决于应用程序决定发送哪些字段。
我还必须应付该对象可能尚未保存的场景。
为了解决这个问题我已经实现了以下内容:
public object Patch(Myclass request)
{
HttpStatusCode SuccessCode;
try
{
var result = (MyClass)Get(request);
if (result != null)
{
request.PopulateWithNonDefaultValues(result);
dbFactory.Run(dbCmd => dbCmd.UpdateNonDefaults(request, r => r.myId == request.myId));
}
else
{
dbFactory.Run(dbCmd => dbCmd.Save(request));
}
SuccessCode = HttpStatusCode.Accepted;
}
catch (Exception e)
{
log.Error(e);
SuccessCode = HttpStatusCode.InternalServerError;
}
return new HttpResult()
{
StatusCode = SuccessCode
};
}
它的工作原理,但东西感觉不对,我敢肯定,必须有一个更好的办法?
谢谢Mythz,我没有注意到Db已经在我身边了!作为ORMLite的扩展,这会是一个很好的候选人,所以我可以调用Db.Patch(request)? – MikeT 2013-02-08 19:40:03
你可以使用'db.UpdateNonDefaults',或者你只需要一个单独的部分DTO(例如'[Alias(“MyClass”)] UpdateMyClass {...}'),只需要更新的属性并调用'db。更新(请求)'。 – mythz 2013-02-08 20:02:02
我遇到的问题是我允许Patch更新DTO上的任何一个或多个属性,取决于他们正在改变的是应用程序/用户。 – MikeT 2013-02-08 21:04:36