public virtual async Task <I> InsertAsync(I entity)
        {
            entity.CheckArgument(nameof(entity));
            entity.FirstItem.CheckArgument(nameof(entity.FirstItem));
            entity.SecondItems.CheckArgument(nameof(entity.SecondItems));

            var result = new E();

            result.FirstEntity.CopyProperties(entity.FirstItem);
            await OneEntityController.InsertAsync(result.FirstEntity).ConfigureAwait(false);

            foreach (var item in entity.SecondItems)
            {
                var secondEntity = new TSecondEntity();

                secondEntity.CopyProperties(item);

                var pi = GetNavigationToOne();

                if (pi != null)
                {
                    pi.SetValue(secondEntity, result.FirstEntity);
                }
                await ManyEntityController.InsertAsync(secondEntity).ConfigureAwait(false);

                result.AddSecondItem(secondEntity);
            }
            return(result);
        }
        public override async Task <I> InsertAsync(I entity)
        {
            entity.CheckArgument(nameof(entity));
            entity.ConnectorItem.CheckArgument(nameof(entity.ConnectorItem));
            entity.OneItem.CheckArgument(nameof(entity.OneItem));
            entity.AnotherItem.CheckArgument(nameof(entity.AnotherItem));

            var result = new E();

            result.OneEntity.CopyProperties(entity.OneItem);
            if (entity.OneItemIncludeSave)
            {
                if (result.OneEntity.Id == 0)
                {
                    await OneEntityController.InsertAsync(result.OneEntity).ConfigureAwait(false);

                    var piNav = GetNavigationToOne();

                    if (piNav != null)
                    {
                        piNav.SetValue(result.ConnectorEntity, result.OneEntity);
                    }
                }
                else
                {
                    await OneEntityController.UpdateAsync(result.OneEntity).ConfigureAwait(false);
                }
            }

            result.AnotherEntity.CopyProperties(entity.AnotherItem);
            if (entity.AnotherItemIncludeSave)
            {
                if (result.AnotherItem.Id == 0)
                {
                    await AnotherEntityController.InsertAsync(result.AnotherEntity).ConfigureAwait(false);

                    var piNav = GetNavigationToAnother();

                    if (piNav != null)
                    {
                        piNav.SetValue(result.ConnectorEntity, result.AnotherEntity);
                    }
                }
                else
                {
                    await AnotherEntityController.UpdateAsync(result.AnotherEntity).ConfigureAwait(false);
                }
            }
            result.ConnectorEntity.CopyProperties(entity.ConnectorItem);
            await ConnectorEntityController.InsertAsync(result.ConnectorEntity).ConfigureAwait(false);

            return(await BeforeReturnAsync(result).ConfigureAwait(false));
        }
        public override async Task <IAppAccess> InsertAsync(IAppAccess entity)
        {
            entity.CheckArgument(nameof(entity));
            entity.FirstItem.CheckArgument(nameof(entity.FirstItem));
            entity.SecondItems.CheckArgument(nameof(entity.SecondItems));

            var result = new AppAccess();

            result.FirstEntity.CopyProperties(entity.FirstItem);
            await OneEntityController.InsertAsync(result.FirstEntity).ConfigureAwait(false);

            foreach (var item in entity.SecondItems)
            {
                var role     = new Role();
                var joinRole = new IdentityXRole();

                joinRole.Identity = result.FirstEntity;
                if (item.Id == 0)
                {
                    item.Designation = RoleController.ClearRoleDesignation(item.Designation);

                    var qryItem = ManyEntityController.ExecuteQuery(e => e.Designation.Equals(item.Designation)).FirstOrDefault();

                    if (qryItem != null)
                    {
                        role.CopyProperties(qryItem);
                        joinRole.RoleId = role.Id;
                    }
                    else
                    {
                        role.CopyProperties(item);
                        await ManyEntityController.InsertAsync(role).ConfigureAwait(false);

                        joinRole.Role = role;
                    }
                }
                else
                {
                    var qryItem = await ManyEntityController.GetByIdAsync(item.Id).ConfigureAwait(false);

                    if (qryItem != null)
                    {
                        role.CopyProperties(qryItem);
                    }
                    joinRole.RoleId = role.Id;
                }
                await IdentityXRoleController.InsertAsync(joinRole).ConfigureAwait(false);

                result.AddSecondItem(role);
            }
            return(result);
        }
        internal override async Task <E> InsertAsync(E entity)
        {
            entity.CheckArgument(nameof(entity));
            entity.OneEntity.CheckArgument(nameof(entity.OneEntity));
            entity.ManyEntities.CheckArgument(nameof(entity.ManyEntities));

            await OneEntityController.InsertAsync(entity.OneEntity).ConfigureAwait(false);

            foreach (var item in entity.ManyEntities)
            {
                SetNavigationToParent(item, entity.OneEntity);
                await ManyEntityController.InsertAsync(item).ConfigureAwait(false);
            }
            return(await BeforeReturnAsync(entity).ConfigureAwait(false));
        }
Example #5
0
        public override async Task <I> InsertAsync(I entity)
        {
            entity.CheckArgument(nameof(entity));
            entity.OneItem.CheckArgument(nameof(entity.OneItem));
            entity.AnotherItem.CheckArgument(nameof(entity.AnotherItem));

            var result = new E();

            result.OneEntity.CopyProperties(entity.OneItem);
            await OneEntityController.InsertAsync(result.OneEntity).ConfigureAwait(false);

            result.AnotherEntity.CopyProperties(entity.AnotherItem);
            var pi = GetNavigationToOne();

            if (pi != null)
            {
                pi.SetValue(result.AnotherEntity, result.OneEntity);
            }
            await AnotherEntityController.InsertAsync(result.AnotherEntity).ConfigureAwait(false);

            return(await BeforeReturnAsync(result).ConfigureAwait(false));
        }
        public override async Task <I> InsertAsync(I entity)
        {
            entity.CheckArgument(nameof(entity));
            entity.OneItem.CheckArgument(nameof(entity.OneItem));
            entity.ManyItems.CheckArgument(nameof(entity.ManyItems));

            var result = new E();

            result.OneEntity.CopyProperties(entity.OneItem);
            await OneEntityController.InsertAsync(result.OneEntity).ConfigureAwait(false);

            foreach (var item in entity.ManyItems)
            {
                var manyEntity = new TManyEntity();

                manyEntity.CopyProperties(item);
                SetNavigationToParent(manyEntity, result.OneEntity);
                await ManyEntityController.InsertAsync(manyEntity).ConfigureAwait(false);

                result.AddManyItem(manyEntity);
            }
            return(await BeforeReturnAsync(result).ConfigureAwait(false));
        }