如何使用 ServiceStack.OrmLite 全局更改命令超时

How to globally change the command timeout using ServiceStack.OrmLite

我有一个基于报告的网站,使用 ServiceStackOrmLite,使用 SQL 服务器后端。由于某些报告的持续时间,我想全局或选择性地(通过 Service-派生的 class 或某些属性)查询 运行 报告有更长的时间CommandTimeout。我想继续使用现有代码来查询报告数据(Db.SelectDb.SqlList 调用),这样我就不必在每个报告中编写样板代码 class & 方法。

我试过使用 AlwaysUseCommand,但这需要声明一个具有打开连接的命令。如果不在我的 AppHost.Configure 方法中打开连接并且从不关闭它,我不知道如何做到这一点。如果是函数指针就更好了,唉

我也考虑过覆盖 ServiceDb 属性,但只是 returns 一个打开的 IDbConnection 而没有让我覆盖命令已创建。

我最后的选择似乎是创建自定义 DbConnection class,就像 MiniProfiler 的 ProfiledDbConnection,但我必须实现一打抽象方法。在 DbCommand 上设置一个 属性 似乎有点矫枉过正。

那么,在 ServiceStack.OrmLite 中,如何全局修改创建的 DbCommand 中的 CommandTimeout

您可以通过以下方式全局更改 CommandTimeout

OrmLiteConfig.CommandTimeout = NewTimeoutInSeconds;

作用域超时

您还可以为特定的数据库连接指定超时:

using (var db = dbFactory.OpenDbConnection())
{
    db.SetCommandTimeout(NewTimeoutInSeconds);
}