Exemplo n.º 1
0
        public static dbscope dbscope(string targetdb = null)
        {
            var d = new dbscope();

            d.targetdb(targetdb);
            return(d);
        }
        /// <summary>
        /// 事务一次提交
        /// timeOut【指定操作的调用的外部服务或者方法执行的超时时间】:分布式事务提交,二次提交依赖外部条件,二次提交时一定要注意外部事务提交或者应用执行的时间
        /// 如果外部事务执行时间过长,会导致本事务的连接线程占用过长,会出现数据库连接泄露的情况出现(尤其是在分布式事务中,一定需要调整好外部服务的调用时间)。
        /// timeOut默认情况下可以不用设置,建议根据业务实际情况设置此值.
        /// </summary>
        public dbscope FirstSubmit(out bool noneError, out string errorMessage, int?timeOut = null)
        {
            dbscope db = new dbscope();

            noneError     = true;
            IsImmediately = false;
            errorMessage  = string.Empty;
            dbSecodeScope = new DistributedTransaction(_targetdb);
            dbSecodeScope.DistributedEventException += (sender) =>
            {
                isNoneException = false;
                exception       = (Exception)sender;

                CommonDealException();
            };
            dbSecodeScope.SetListQuery = doScopeList;
            //处理bulkList

            dbSecodeScope.BulkTablies = this.bulkTablies;
            dbSecodeScope.SetbulkList = this.bulkList;

            CommandInfo = dbSecodeScope.ComamInfo;
            noneError   = dbSecodeScope.BeginTransaction();
            if (!noneError)
            {
                errorMessage = exception.Message;
            }

            if (timeOut.HasValue)
            {
                taskSource = new TaskCompletionSource <bool>();
                RegisetiOverTime(taskSource, timeOut.Value);
            }
            return(this);
        }