ServiceStack OrmLite 和 PostgreSQL - 超时
ServiceStack OrmLite and PostgreSQL - timeouts
我正在使用 ServiceStack 的 OrmLite 连接到 PostgreSQL 更新大量数据,但是,我遇到大量超时。
示例代码:
public class AccountService : Service
{
public object Any(ImportAccounts request)
{
var sourceAccountService = this.ResolveService<SourceAccountService();
var sourceAccounts = (GetSourceAccountResponse)sourceAccountService.Get(new GetSourceAccounts());
foreach (var a in sourceAccounts)
{
Db.Save(a.ConvertTo<Account>());
}
}
}
源帐户服务,位于同一个项目中并访问同一个数据库。
public class SourceAccountService : Service
{
public object Get(GetSourceAccounts request)
{
return new GetSourceAccountsResponse { Result = Db.Select<SourceAccounts>().ToList() };
}
}
问题,
考虑到上述设置,我是否应该期待大量超时?
使用 using (IDbConnection db = DbFactory.OpenDbConnection()) 而不是 Db 更好吗?
如果您正在解析和执行服务,您应该在 using 语句中执行它,以便打开 Db
连接和
其他资源妥善处理:
using (var service = this.ResolveService<SourceAccountService())
{
var sourceAccounts = service.Get(new GetSourceAccounts());
foreach (var a in sourceAccounts)
{
Db.Save(a.ConvertTo<Account>());
}
}
如果您正在执行其他服务,最好在服务上指定 Return 类型以增加类型安全性
并在每个呼叫站点减少样板,例如:
public class SourceAccountService : Service
{
public GetSourceAccountsResponse Get(GetSourceAccounts request)
{
return new GetSourceAccountsResponse {
Result = Db.Select<SourceAccounts>()
};
}
}
Note: Db.Select<T>
returns a List so .ToList()
is unnecessary,
另一种替代 ResolveService<T>
执行服务的方法是使用:
var sourceAccounts = (GetSourceAccountsResponse)base.ExecuteRequest(new GetSourceAccounts());
与上面相同,并在 using {}
.
内执行服务
我正在使用 ServiceStack 的 OrmLite 连接到 PostgreSQL 更新大量数据,但是,我遇到大量超时。
示例代码:
public class AccountService : Service
{
public object Any(ImportAccounts request)
{
var sourceAccountService = this.ResolveService<SourceAccountService();
var sourceAccounts = (GetSourceAccountResponse)sourceAccountService.Get(new GetSourceAccounts());
foreach (var a in sourceAccounts)
{
Db.Save(a.ConvertTo<Account>());
}
}
}
源帐户服务,位于同一个项目中并访问同一个数据库。
public class SourceAccountService : Service
{
public object Get(GetSourceAccounts request)
{
return new GetSourceAccountsResponse { Result = Db.Select<SourceAccounts>().ToList() };
}
}
问题,
考虑到上述设置,我是否应该期待大量超时?
使用 using (IDbConnection db = DbFactory.OpenDbConnection()) 而不是 Db 更好吗?
如果您正在解析和执行服务,您应该在 using 语句中执行它,以便打开 Db
连接和
其他资源妥善处理:
using (var service = this.ResolveService<SourceAccountService())
{
var sourceAccounts = service.Get(new GetSourceAccounts());
foreach (var a in sourceAccounts)
{
Db.Save(a.ConvertTo<Account>());
}
}
如果您正在执行其他服务,最好在服务上指定 Return 类型以增加类型安全性 并在每个呼叫站点减少样板,例如:
public class SourceAccountService : Service
{
public GetSourceAccountsResponse Get(GetSourceAccounts request)
{
return new GetSourceAccountsResponse {
Result = Db.Select<SourceAccounts>()
};
}
}
Note:
Db.Select<T>
returns a List so.ToList()
is unnecessary,
另一种替代 ResolveService<T>
执行服务的方法是使用:
var sourceAccounts = (GetSourceAccountsResponse)base.ExecuteRequest(new GetSourceAccounts());
与上面相同,并在 using {}
.