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); }
public async Task <int> DeleteAndSavePlaylistItem(PlaylistItem item) { var result = await DeleteAndSaveOrdered(item, _ => _.OrderNumber, _ => _.PlaylistId == item.PlaylistId); ResetSubject.OnNext(EntityType.Playlist); return(result); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }