【问题标题】:ServiceStack OrmLite - Elegant way to handle SQL Server Connection DropsServiceStack OrmLite - 处理 SQL Server 连接断开的优雅方式
【发布时间】:2018-04-23 21:54:06
【问题描述】:

我们目前正在使用 ORMLite,它运行良好。 我们使用它的地方之一是运行大型批处理。 这些进程在一个事务中运行一个大批量,如果有任何错误,它会回滚事务,然后需要再次运行。

有没有一种方法可以更好地处理连接断开(可能非常快)之类的事情,然后它可以重新建立连接,然后从那里重新继续?

【问题讨论】:

    标签: ormlite-servicestack


    【解决方案1】:

    唯一类似于您所追求的东西是使用Custom OrmLite Exec Fitler,您可以使用它来注入您自己的自定义执行策略。

    OrmLite 主页上的示例显示了使用 Exec 过滤器执行每个查询 3 次的示例:

    public class ReplayOrmLiteExecFilter : OrmLiteExecFilter
    {
        public int ReplayTimes { get; set; }
    
        public override T Exec<T>(IDbConnection dbConn, Func<IDbCommand, T> filter)
        {
            var holdProvider = OrmLiteConfig.DialectProvider;
            var dbCmd = CreateCommand(dbConn);
            try
            {
                var ret = default(T);
                for (var i = 0; i < ReplayTimes; i++)
                {
                    ret = filter(dbCmd);
                }
                return ret;
            }
            finally
            {
                DisposeCommand(dbCmd);
                OrmLiteConfig.DialectProvider = holdProvider;
            }
        }
    }
    
    OrmLiteConfig.ExecFilter = new ReplayOrmLiteExecFilter { ReplayTimes = 3 };
    
    using (var db = OpenDbConnection())
    {
        db.DropAndCreateTable<PocoTable>();
        db.Insert(new PocoTable { Name = "Multiplicity" });
    
        var rowsInserted = db.Count<PocoTable>(x => x.Name == "Multiplicity"); //3
    }
    

    但它使用相同的IDbConnection,即它不会创建新的数据库连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多