Esempio n. 1
0
        /// <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();
            }
        }