public void OnSubmit(DataGateKey gkey, DataSubmitRequest request) { foreach (var dg in _dataGates.OfType <IGlobalSubmitDataGate>()) { dg.OnSubmit(gkey, request); } }
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); } }
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); }
/// <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(); } } }
/// <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)); }
/// <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); }