ServiceStack OrmLite命令超时

本文关键字:超时 命令 OrmLite ServiceStack | 更新日期: 2023-09-27 18:03:30

使用IDbConnection时。如何设置命令超时时间?

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

如果我使用idb命令。我可以设置命令超时,但是我得到了一堆关于已弃用方法的警告。

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

ServiceStack OrmLite命令超时

随着最近的变化,OrmLite不再直接提供围绕IDbCommand对象的api(现在在最新版本中都是内部的)。

但是由于OrmLite只是ADO上的扩展方法。. NET的底层IDbConnection和IDbCommand接口,您可以在需要时轻松绕过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