/// <summary> Prepare asynchronous. </summary> /// /// <param name="context"> The submit context. </param> /// <param name="cancellationToken"> A cancellation token. </param> /// /// <returns> A System.Threading.Tasks.Task. </returns> public async Task PrepareAsync(SubmitContext context, CancellationToken cancellationToken) { //Source query expression dynamically var dbContext = context.ApiContext.GetProperty <DynamicContext>(DynamicContext.cDbContextKey); if (dbContext != null) { foreach (var entry in context.ChangeSet.Entries.OfType <DataModificationEntry>()) { Type entityType = dbContext.GetModelType(entry.EntitySetName); System.Data.Entity.DbSet set = dbContext.Set(entityType); object entity = null; if (entry.IsNew) { entity = set.Create(); SetValues(entity, entityType, entry.LocalValues); set.Add(entity); } else if (entry.IsDelete) { entity = await FindEntity(context, entry, cancellationToken); set.Remove(entity); } else if (entry.IsUpdate) { entity = await FindEntity(context, entry, cancellationToken); DbEntityEntry dbEntry = dbContext.Entry(entity); SetValues(dbEntry, entry, entityType); } else { throw new NotSupportedException(); } entry.Entity = entity; } } else if (this.InnerHandler != null) { await this.InnerHandler.PrepareAsync(context, cancellationToken); } else { throw new NotImplementedException(); } }