【发布时间】:2015-01-22 17:49:02
【问题描述】:
我在 ServiceStack 服务中执行相当复杂的保存操作时遇到问题。 为了简化解释,该服务启动一个 Ormlite 事务并在其中通过 ResolveService 调用另一个服务:
public ApplicationModel Post(ApplicationModel request)
{
using (IDbTransaction tr = Db.OpenTransaction())
{
using (var cases = ResolveService<CaseService>())
{
request.Case = cases.Post(request.Case);
}
}
Db.Save<Application>(request.Application, true);
}
另一个服务(CaseService)也使用事务来执行其逻辑:
public CaseModel Post(CaseModel request)
{
using (IDbTransaction tr = Db.OpenTransaction())
{
Db.Insert<Case>(request);
Db.SaveAllReferences<CaseModel>(request);
}
}
在更高层次的服务调用其他服务的类似情况下,会引发“超时已过期”错误,尽管我密切监视 SQL Server 的死锁,但到目前为止我还无法解决。
我的问题是,这是否是跨服务使用/共享 Ormlite 事务的正确方式,还是有其他机制?
提前致谢。
【问题讨论】:
标签: sql-server transactions servicestack ormlite-servicestack