Exemplo n.º 1
0
        public async Task <int> AddAndSaveOrdered <T>(T entity,
                                                      Expression <Func <T, int> > selector,
                                                      Expression <Func <T, bool> > filter = null) where T : class, IEntity, IOrderedEntity
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            context.Set <T>().Add(entity);

            IQueryable <T> query = context.Set <T>();

            if (filter != null)
            {
                query = query.Where(filter);
            }
            var maxOrderNumber = query.Select(selector).DefaultIfEmpty(0).Max();

            entity.OrderNumber = ++maxOrderNumber;

            var result = await SaveAsync();

            ResetSubject.OnNext(GetEntityType(typeof(T)));
            return(result);
        }
Exemplo n.º 2
0
        public async Task <int> DeleteAndSavePlaylistItem(PlaylistItem item)
        {
            var result = await DeleteAndSaveOrdered(item, _ => _.OrderNumber, _ => _.PlaylistId == item.PlaylistId);

            ResetSubject.OnNext(EntityType.Playlist);
            return(result);
        }
Exemplo n.º 3
0
        public async Task <int> AddRangeAndSave <T>(IEnumerable <T> entities) where T : class
        {
            AddRange(entities);
            int result = await SaveAsync();

            ResetSubject.OnNext(GetEntityType(typeof(T)));
            return(result);
        }
Exemplo n.º 4
0
        public async Task <int> UpdateAsyncAndSave <T>(T entity, bool signalReset = true) where T : class, IEntity
        {
            await UpdateAsync(entity);

            var result = await context.SaveChangesAsync();

            if (signalReset)
            {
                ResetSubject.OnNext(GetEntityType(typeof(T)));
            }
            return(result);
        }
Exemplo n.º 5
0
        public async Task <int> AddAndSave <T>(T entity) where T : class, IEntity
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            context.Set <T>().Add(entity);

            var result = await SaveAsync();

            ResetSubject.OnNext(GetEntityType(typeof(T)));
            return(result);
        }
Exemplo n.º 6
0
        public int ChangeOrder <T>(T target, int newOrderNumber, Expression <Func <T, bool> > filter = null)
            where T : class, IOrderedEntity
        {
            if (context.IsDetached(target))
            {
                context.Set <T>().Attach(target);
            }

            if (filter == null)
            {
                filter = PredicateBuilder.New <T>(true);
            }

            var maxOrderNumber = Max(_ => _.OrderNumber, filter);
            var upperBound     = Math.Min(maxOrderNumber, newOrderNumber);

            newOrderNumber = Math.Max(upperBound, 1);

            if (target.OrderNumber == newOrderNumber)
            {
                return(0);
            }

            IEnumerable <T> itemsToMove;

            if (newOrderNumber > target.OrderNumber)
            {
                itemsToMove =
                    context.Set <T>()
                    .AsExpandable()
                    .Where(filter.And(_ => _.OrderNumber <= newOrderNumber && _.OrderNumber > target.OrderNumber));
                itemsToMove.ForEach(_ => _.OrderNumber = --_.OrderNumber);
            }

            else
            {
                itemsToMove =
                    context.Set <T>()
                    .AsExpandable()
                    .Where(filter.And(_ => _.OrderNumber >= newOrderNumber && _.OrderNumber < target.OrderNumber));
                itemsToMove.ForEach(_ => _.OrderNumber = ++_.OrderNumber);
            }

            target.OrderNumber = newOrderNumber;
            var result = Save();

            ResetSubject.OnNext(GetEntityType(typeof(T)));
            return(result);
        }
Exemplo n.º 7
0
        public async Task <int> DeleteRangeAndSave <T>(IEnumerable <int> entityIds) where T : class, IEntity
        {
            if (entityIds == null)
            {
                throw new ArgumentNullException(nameof(entityIds));
            }

            var entities = context.Set <T>().Where(_ => entityIds.Contains(_.Id));

            context.Set <T>().RemoveRange(entities);

            int result = await SaveAsync();

            ResetSubject.OnNext(GetEntityType(typeof(T)));
            return(result);
        }
Exemplo n.º 8
0
        public async Task <int> DeleteAndSave <T>(T entity) where T : class, IEntity
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            if (context.IsDetached(entity))
            {
                context.Set <T>().Attach(entity);
            }
            context.Set <T>().Remove(entity);

            int result = await SaveAsync();

            ResetSubject.OnNext(GetEntityType(typeof(T)));
            return(result);
        }
Exemplo n.º 9
0
        public async Task <int> DeleteAndSaveOrdered <T>(T entity,
                                                         Expression <Func <T, int> > selector,
                                                         Expression <Func <T, bool> > filter = null) where T : class, IEntity, IOrderedEntity
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            if (context.IsDetached(entity))
            {
                context.Set <T>().Attach(entity);
            }

            context.Set <T>().Remove(entity);
            IQueryable <T> query = context.Set <T>();

            if (filter != null)
            {
                query = query.Where(filter);
            }

            var orderedEntities = query.Where(_ => _.Id != entity.Id).OrderBy(selector);

            var i = 0;

            foreach (var entityToUpdate in orderedEntities)
            {
                entityToUpdate.OrderNumber = ++i;
            }

            var result = await SaveAsync();

            ResetSubject.OnNext(GetEntityType(typeof(T)));
            return(result);
        }