繁体   English   中英

ServiceStack OrmLite命令超时

[英]ServiceStack OrmLite Command Timeout

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

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

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

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

使用最新的更改,OrmLite不再直接在IDbCommand对象周围提供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;

派对有点晚了,正如你在评论中看到的那样,我已经有了这个问题。 我的解决方案是扩展神话的建议并创建一个新的扩展方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM