public async Task AfterChangeSetCommited(ChangeSetRequest changeSet, SubResultList refreshResult) { IEnumerable <IDataManager> dataManagers = _dataManagers.Values.Select(m => (IDataManager)m); foreach (IDataManager dataManager in dataManagers) { await dataManager.AfterChangeSetCommited(changeSet, refreshResult); } }
public async Task Invoke(CRUDContext <TService> ctx) { IServiceOperationsHelper <TService> serviceHelper = ctx.ServiceContainer.GetServiceHelper(); IDataHelper <TService> dataHelper = ctx.ServiceContainer.GetDataHelper(); Metadata.RunTimeMetadata metadata = ctx.Service.GetMetadata(); ChangeSetRequest changeSet = ctx.Request; IChangeSetGraph graph = ctx.Properties.Get <IChangeSetGraph>(CRUDContext <TService> .CHANGE_GRAPH_KEY) ?? throw new InvalidOperationException("Could not get Graph changes from properties"); CRUDServiceMethods serviceMethods = ctx.Properties.Get <CRUDServiceMethods>(CRUDContext <TService> .CHANGE_METHODS_KEY) ?? throw new InvalidOperationException("Could not get CRUD Service methods from properties"); RequestContext req = CRUDContext <TService> .CreateRequestContext(ctx.Service, changeSet); using (RequestCallContext callContext = new RequestCallContext(req)) { await serviceMethods.ExecuteChangeSet(); await serviceHelper.AfterExecuteChangeSet(changeSet); await serviceMethods.AfterChangeSetExecuted(); foreach (RowInfo rowInfo in graph.AllList) { if (rowInfo.changeType != ChangeType.Deleted) { serviceHelper.UpdateRowInfoAfterUpdates(rowInfo); } } SubResultList subResults = new SubResultList(); await serviceHelper.AfterChangeSetCommited(changeSet, subResults); await serviceMethods.AfterChangeSetCommited(subResults); SubsetsGenerator subsetsGenerator = new SubsetsGenerator(metadata, dataHelper); ctx.Response.subsets = subsetsGenerator.CreateSubsets(subResults); } await _next(ctx); }
protected virtual Task AfterChangeSetCommited(ChangeSetRequest message, SubResultList refreshResult) { return(Task.CompletedTask); }
public virtual Task AfterChangeSetCommited(ChangeSetRequest changeSet, SubResultList refreshResult) { return(Task.CompletedTask); }
/// <summary> /// Refresh Customer's custom ServerCalculated field 'AddressCount' on insert or delete /// </summary> /// <param name="changeSet"></param> /// <param name="refreshResult"></param> /// <returns></returns> public override async Task AfterChangeSetCommited(ChangeSetRequest changeSet, SubResultList refreshResult) { DbSetInfo custAddrDbSet = this.GetSetInfosByEntityType(typeof(CustomerAddress)).Single(); DbSetInfo customerDbSet = this.GetSetInfosByEntityType(typeof(Customer)).Single(); DbSet dbCustAddr = changeSet.dbSets.FirstOrDefault(d => d.dbSetName == custAddrDbSet.dbSetName); if (dbCustAddr != null) { int[] custIDs = dbCustAddr.rows.Where(r => r.changeType == ChangeType.Deleted || r.changeType == ChangeType.Added).Select(r => r.values.First(v => v.fieldName == "CustomerId").val).Select(id => int.Parse(id)).ToArray(); System.Collections.Generic.List <Customer> customersList = await DB.Customer.AsNoTracking().Where(c => custIDs.Contains(c.CustomerId)).ToListAsync(); System.Collections.Generic.List <int> customerAddress = await DB.CustomerAddress.AsNoTracking().Where(ca => custIDs.Contains(ca.CustomerId)).Select(ca => ca.CustomerId).ToListAsync(); customersList.ForEach(customer => { customer.AddressCount = customerAddress.Count(id => id == customer.CustomerId); }); SubResult subResult = new SubResult { dbSetName = customerDbSet.dbSetName, Result = customersList }; refreshResult.Add(subResult); } }