如何使用 ServiceStack.OrmLite 全局更改命令超时
How to globally change the command timeout using ServiceStack.OrmLite
我有一个基于报告的网站,使用 ServiceStack
和 OrmLite
,使用 SQL 服务器后端。由于某些报告的持续时间,我想全局或选择性地(通过 Service
-派生的 class 或某些属性)查询 运行 报告有更长的时间CommandTimeout
。我想继续使用现有代码来查询报告数据(Db.Select
、Db.SqlList
调用),这样我就不必在每个报告中编写样板代码 class & 方法。
我试过使用 AlwaysUseCommand
,但这需要声明一个具有打开连接的命令。如果不在我的 AppHost.Configure
方法中打开连接并且从不关闭它,我不知道如何做到这一点。如果是函数指针就更好了,唉
我也考虑过覆盖 Service
的 Db
属性,但只是 returns 一个打开的 IDbConnection
而没有让我覆盖命令已创建。
我最后的选择似乎是创建自定义 DbConnection
class,就像 MiniProfiler 的 ProfiledDbConnection,但我必须实现一打抽象方法。在 DbCommand 上设置一个 属性 似乎有点矫枉过正。
那么,在 ServiceStack.OrmLite
中,如何全局修改创建的 DbCommand
中的 CommandTimeout
?
您可以通过以下方式全局更改 CommandTimeout
:
OrmLiteConfig.CommandTimeout = NewTimeoutInSeconds;
作用域超时
您还可以为特定的数据库连接指定超时:
using (var db = dbFactory.OpenDbConnection())
{
db.SetCommandTimeout(NewTimeoutInSeconds);
}
我有一个基于报告的网站,使用 ServiceStack
和 OrmLite
,使用 SQL 服务器后端。由于某些报告的持续时间,我想全局或选择性地(通过 Service
-派生的 class 或某些属性)查询 运行 报告有更长的时间CommandTimeout
。我想继续使用现有代码来查询报告数据(Db.Select
、Db.SqlList
调用),这样我就不必在每个报告中编写样板代码 class & 方法。
我试过使用 AlwaysUseCommand
,但这需要声明一个具有打开连接的命令。如果不在我的 AppHost.Configure
方法中打开连接并且从不关闭它,我不知道如何做到这一点。如果是函数指针就更好了,唉
我也考虑过覆盖 Service
的 Db
属性,但只是 returns 一个打开的 IDbConnection
而没有让我覆盖命令已创建。
我最后的选择似乎是创建自定义 DbConnection
class,就像 MiniProfiler 的 ProfiledDbConnection,但我必须实现一打抽象方法。在 DbCommand 上设置一个 属性 似乎有点矫枉过正。
那么,在 ServiceStack.OrmLite
中,如何全局修改创建的 DbCommand
中的 CommandTimeout
?
您可以通过以下方式全局更改 CommandTimeout
:
OrmLiteConfig.CommandTimeout = NewTimeoutInSeconds;
作用域超时
您还可以为特定的数据库连接指定超时:
using (var db = dbFactory.OpenDbConnection())
{
db.SetCommandTimeout(NewTimeoutInSeconds);
}