Servicestack 自动映射更新端点
Servicestack automap update endpoints
我们正在使用 ServiceStack QueryDb 公开某些业务对象以进行自动查询,并且效果很好。
[Route("/catalog/customers")]
[Authenticate]
public class QueryCustomers : QueryDb<ServiceModel.Catalog.Customer> { }
我们想实现某种 UpdateDb,它可以自动映射经过身份验证的 POST、PUT 和 DELETE 请求以插入、更新和删除自动映射的预定义 OrmLite 业务对象,但看不到任何网络上的例子。理想情况下,我们可以创建一个像这样简单的端点:
[Route("/edits/customers")]
[Authenticate]
public class UpdateCustomers : UpdateDb<ServiceModel.Catalog.Customer> { }
如果这已经在 ServiceStack 库或其他地方的某处完成,我宁愿不必自己动手......这是 ServiceStack 已经支持的东西,还是我们自己开发这个 UpdateDb效用?...
这需要 AutoQuery 的 CRUD 版本,但尚不存在,因此您需要正常实施更新服务。
尚未进行大量测试,但看起来 UpdateDb 将涉及针对 QueryDb 实现的一项调整 -
public long CreateUpdate<From>(IUpdateDb<From> dto, Dictionary<string, string> dynamicParams, IRequest req = null)
{
long result;
var db = GetDb<From>(req);
var body = req.GetRawBody();
var jsonObject = JsonObject.Parse(body);
var obj = jsonObject.ConvertTo<From>();
var id = (obj as IHasId<int>)?.Id;
if (id == null)
throw new Exception("Cannot update without identity field defined");
if (req.Verb == "DELETE")
{
result = db.DeleteById<From>(id);
}
else if (req.Verb == "POST")
{
db.InsertAll(new[] { obj });
result = ((IHasId<int>)obj).Id;
}
else
{
result = db.UpdateOnly(obj,
jsonObject.Keys.ToArray(),
u => ((IHasId<int>)u).Id == id);
}
return result;
}
我们正在使用 ServiceStack QueryDb 公开某些业务对象以进行自动查询,并且效果很好。
[Route("/catalog/customers")]
[Authenticate]
public class QueryCustomers : QueryDb<ServiceModel.Catalog.Customer> { }
我们想实现某种 UpdateDb,它可以自动映射经过身份验证的 POST、PUT 和 DELETE 请求以插入、更新和删除自动映射的预定义 OrmLite 业务对象,但看不到任何网络上的例子。理想情况下,我们可以创建一个像这样简单的端点:
[Route("/edits/customers")]
[Authenticate]
public class UpdateCustomers : UpdateDb<ServiceModel.Catalog.Customer> { }
如果这已经在 ServiceStack 库或其他地方的某处完成,我宁愿不必自己动手......这是 ServiceStack 已经支持的东西,还是我们自己开发这个 UpdateDb效用?...
这需要 AutoQuery 的 CRUD 版本,但尚不存在,因此您需要正常实施更新服务。
尚未进行大量测试,但看起来 UpdateDb 将涉及针对 QueryDb 实现的一项调整 -
public long CreateUpdate<From>(IUpdateDb<From> dto, Dictionary<string, string> dynamicParams, IRequest req = null)
{
long result;
var db = GetDb<From>(req);
var body = req.GetRawBody();
var jsonObject = JsonObject.Parse(body);
var obj = jsonObject.ConvertTo<From>();
var id = (obj as IHasId<int>)?.Id;
if (id == null)
throw new Exception("Cannot update without identity field defined");
if (req.Verb == "DELETE")
{
result = db.DeleteById<From>(id);
}
else if (req.Verb == "POST")
{
db.InsertAll(new[] { obj });
result = ((IHasId<int>)obj).Id;
}
else
{
result = db.UpdateOnly(obj,
jsonObject.Keys.ToArray(),
u => ((IHasId<int>)u).Id == id);
}
return result;
}