Example #1
0
 public void OnSubmit(DataGateKey gkey, DataSubmitRequest request)
 {
     foreach (var dg in _dataGates.OfType <IGlobalSubmitDataGate>())
     {
         dg.OnSubmit(gkey, request);
     }
 }
Example #2
0
        private async Task RecurDelete(DataGateKey gkey, DataSubmitRequest request)
        {
            //先删子表
            foreach (var detail in request.Details)
            {
                var dkey = GetDataGate(detail.Key);
                await RecurDelete(dkey, detail);
            }

            if (!request.Removed.IsEmpty())
            {
                await DeleteManyAsync(gkey, request.Removed);
            }
        }
Example #3
0
        private async Task <IEnumerable <string> > RecurUpdate(DataGateKey gkey, DataSubmitRequest request)
        {
            IEnumerable <string> ids = new string[0];

            if (!request.Added.IsEmpty())
            {
                ids = await InsertManyAsync(gkey, request.Added);
            }
            if (!request.Changed.IsEmpty())
            {
                await UpdateManyAsync(gkey, request.Changed);
            }

            //后插子表
            foreach (var detail in request.Details)
            {
                var dkey = GetDataGate(detail.Key);
                await RecurUpdate(dkey, detail);
            }
            return(ids);
        }
Example #4
0
        /// <summary>
        /// 批量执行增删改操作,是此系统的核心方法
        /// </summary>
        /// <param name="key">客户端提交的Key值,代表执行的操作</param>
        /// <param name="request">请求参数</param>
        /// <returns>如有新增操作,则返回新增的对象ID列表</returns>
        public async Task <IEnumerable <string> > SubmitAsync(string key, DataSubmitRequest request)
        {
            DataGateKey gkey = GetDataGate(key);

            gkey.DataGate.OnSubmit(gkey, request);

            //有测试数据时直接返回测试数据
            if (gkey.Data != null)
            {
                return(gkey.Data.Select(jk => jk.ToString()));
            }

            bool isStartCall = !DB.InTrans;

            if (isStartCall)
            {
                DB.BeginTrans();
            }

            try
            {
                //先递归删除, 先删子表
                await RecurDelete(gkey, request);

                //再递归增改, 先增改主表
                return(await RecurUpdate(gkey, request));
            }
            catch (Exception)
            {
                DB.RollbackTrans();
                throw;
            }
            finally
            {
                if (isStartCall && DB.InTrans)
                {
                    DB.EndTrans();
                }
            }
        }
Example #5
0
        /// <summary>
        /// 批量执行增删改操作, 使用一个匿名对象转成DataSubmitRequest
        /// 用于服务端内部调用
        /// </summary>
        /// <param name="key"></param>
        /// <param name="requestObj">匿名对象</param>
        /// <returns></returns>
        public async Task <IEnumerable <string> > SubmitAsync(string key, object requestObj)
        {
            DataSubmitRequest request = JObject.FromObject(requestObj).ToObject <DataSubmitRequest>();

            return(await SubmitAsync(key, request));
        }
Example #6
0
        /// <summary>
        /// 批量执行增删改操作,是此系统的核心方法
        /// </summary>
        /// <param name="key">客户端提交的Key值,代表执行的操作</param>
        /// <param name="request">请求参数</param>
        /// <returns>如有新增操作,则返回新增的对象ID列表</returns>
        public async Task <IEnumerable <string> > SubmitAsync(string key, DataSubmitRequest request)
        {
            DataGateKey gkey = GetDataGate(key);

            //有测试数据时直接返回测试数据
            if (gkey.Data != null)
            {
                return(gkey.Data.Select(jk => jk.ToString()));
            }

            IEnumerable <string> ids = new string[0];
            bool isStartCall         = !DB.InTrans;

            if (isStartCall)
            {
                DB.BeginTrans();
            }

            try
            {
                //先删子表
                foreach (var detail in request.Details)
                {
                    var dkey = GetDataGate(detail.Key);
                    if (!detail.Removed.IsEmpty())
                    {
                        await DeleteManyAsync(dkey, detail.Removed);
                    }
                }

                if (!request.Added.IsEmpty())
                {
                    ids = await InsertManyAsync(gkey, request.Added);
                }
                if (!request.Changed.IsEmpty())
                {
                    await UpdateManyAsync(gkey, request.Changed);
                }
                if (!request.Removed.IsEmpty())
                {
                    await DeleteManyAsync(gkey, request.Removed);
                }

                //后插子表
                foreach (var detail in request.Details)
                {
                    var dkey = GetDataGate(detail.Key);
                    if (!detail.Added.IsEmpty())
                    {
                        await InsertManyAsync(dkey, detail.Added);
                    }
                    if (!detail.Changed.IsEmpty())
                    {
                        await UpdateManyAsync(dkey, detail.Changed);
                    }
                }
            }
            catch (DbException)
            {
                DB.RollbackTrans();
                throw;
            }
            if (isStartCall)
            {
                DB.EndTrans();
            }
            return(ids);
        }