【问题标题】:ServiceStack OrmLite Command TimeoutServiceStack OrmLite 命令超时
【发布时间】:2013-03-12 05:06:41
【问题描述】:

使用 IDbConnection.ExecuteSql 时如何设置命令超时?

IDbConnection db = ConnectionFactory.OpenDbConnection();
db.ExecuteSql("...");

如果我使用 IDbCommand.ExecuteSql(见下文)方法,我可以设置命令超时,但我会收到一堆关于已弃用方法的警告。

IDbCommand comm = db.CreateCommand()
comm.CommandTimeout = 240;                    
comm.ExecuteSql("...");

【问题讨论】:

    标签: c# servicestack ormlite-servicestack


    【解决方案1】:

    随着最近的变化,OrmLite 不再直接提供围绕 IDbCommand 对象的 API(现在这些 API 在最新版本中都已内置)。

    但由于 OrmLite 只是 ADO.NET 底层 IDbConnectionIDbCommand 接口的扩展方法,因此您可以在需要时轻松绕过 OrmLite 的扩展方法,直接使用它们,例如:

    IDbConnection db = ConnectionFactory.OpenDbConnection();
    IDbCommand cmd = db.CreateCommand();
    cmd.CommandTimeout = 240;  
    cmd.CommandText = "...";
    cmd.ExecuteNonQuery();
    

    或者,您可以使用以下命令设置全局 CommandTimeout:

    OrmLiteConfig.CommandTimeout = 240;
    

    【讨论】:

    • 如果我们要使用db.Select生成的sql怎么办。当我们想设置超时时,我们应该使用自定义的手写 sql 查询吗? @mythz
    • @mustafasturan,有同样的问题...我使用IDbConnection.Query<>,我需要指定 that 的超时时间。
    • 这仍然是最好的解决方案吗?似乎如果您在连接字符串上设置 CommandTimeout 参数,则使用该 dbconnection 创建的所有命令都应使用提供的超时。这种行为是否有可能被改变?
    • @on3al 我已更新答案以包含 OrmLiteConfig.CommandTimeout 示例
    • 是否有任何计划允许在非全局范围内设置它?我希望允许 api 的消费者根据请求设置它
    【解决方案2】:

    聚会有点晚了,正如您在我的评论中看到的那样,我遇到了这个确切的问题。我的解决方案是扩展神话的建议并创建一个新的扩展方法:

    public static partial class IDbConnectionExtensionMethods
    {
        public static List<T> Query<T>(this IDbConnection self, string sql, int commandTimeout)
        {
            List<T> results = null;
            self.Exec((dbCmd) =>
                {
                    dbCmd.CommandTimeout = commandTimeout;
                    dbCmd.CommandText = sql;
                    using (var reader = dbCmd.ExecuteReader())
                    {
                        results = reader.ConvertToList<T>();
                    }
                });
    
            return results;
        }   // eo Query<T>
    }   // eo class IDbConnectionExtensionMethods
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2022-01-18
      相关资源
      最近更新 更多