public Character QueryById(Guid id) { var dbCharacter = Characters .AsNoTracking() .Include(x => x.Friends) .Include(x => x.Episodes) .FirstOrDefault(x => x.Id == id); if (dbCharacter is null) { return(null); } return (new Character { Id = dbCharacter.Id, Name = dbCharacter.Name, Episodes = new Episodes(dbCharacter.Episodes .Select(y => y.Episode) .ToArray()), Friends = new Friends(dbCharacter.Friends .Select(y => new Friend { Id = y.FriendId, Name = y.FriendName }) .ToArray()) }); }
public void InsertUpdateOrDeleteGraph(object entity) { ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; if (entity is Character character) { var existing = Characters .AsNoTracking() .Include(c => c.FunctionKeys) .Include(c => c.Inventories) .ThenInclude(c => c.Items) .Include(c => c.SkillRecords) .FirstOrDefault(c => c.ID == character.ID); if (existing != null) { foreach (var functionKey in existing.FunctionKeys) { if (character.FunctionKeys.All(f => f.ID != functionKey.ID)) { Entry(functionKey).State = EntityState.Deleted; } } var existingItems = existing.Inventories.SelectMany(i => i.Items).ToList(); var currentItems = character.Inventories.SelectMany(i => i.Items).ToList(); foreach (var existingItem in existingItems) { if (currentItems.All(i => i.ID != existingItem.ID)) { Entry(existingItem).State = EntityState.Deleted; } } foreach (var skillRecord in existing.SkillRecords) { if (character.SkillRecords.All(s => s.ID != skillRecord.ID)) { Entry(skillRecord).State = EntityState.Deleted; } } } } }
public (Characters data, int pageNr, int charactersCount) QueryPaginated(PaginationOptions paginationOptions) { int count = Characters.Count(); int lastPage = 0; int pageSize = paginationOptions.PageSize < 1 ? 1 : paginationOptions.PageSize; if (count % pageSize != 0) { lastPage = count / pageSize + 1; } else { lastPage = count / pageSize; } int pageNr = lastPage < paginationOptions.PageNumber?lastPage:paginationOptions.PageNumber; return( new Characters( Characters.AsNoTracking().Include(x => x.Friends).Include(x => x.Episodes) .Skip(pageSize * (pageNr - 1)) .Take(pageSize) .Select(x => new Character { Id = x.Id, Name = x.Name, Episodes = new Episodes(x.Episodes .Select(y => y.Episode) .ToArray()), Friends = new Friends(x.Friends .Select(y => new Friend { Id = y.FriendId, Name = y.FriendName }) .ToArray()) }) .ToArray()) , pageNr, count); }
public Characters Query() { return (new Characters( Characters.AsNoTracking().Include(x => x.Friends).Include(x => x.Episodes) .Select(x => new Character { Id = x.Id, Name = x.Name, Episodes = new Episodes(x.Episodes .Select(y => y.Episode) .ToArray()), Friends = new Friends(x.Friends .Select(y => new Friend { Id = y.FriendId, Name = y.FriendName }) .ToArray()) }) .ToArray())); }
public async Task <IEnumerable <Сharacter> > GetCharactersWithGuns() { return(await Characters.AsNoTracking().Include(b => b.AviableGuns).ToListAsync()); }
public async Task <IEnumerable <Сharacter> > GetCharacters() { return(await Characters.AsNoTracking().ToListAsync()); }
public override int SaveChanges() { try { var aliasChangeSet = ChangeTracker.Entries <Character>(); if (aliasChangeSet != null) { foreach (var entry in aliasChangeSet.Where(x => x.State != EntityState.Unchanged)) { var query = from s in Servers join a in Characters on s.ID equals a.Server.ID where a.ID == entry.Entity.ID select s; var server = query.AsNoTracking().SingleOrDefault(); if (server == null) { continue; // Seeding } var na = Characters.AsNoTracking().SingleOrDefault(x => (x.Server.ID == server.ID || x.Server.DiscordID == 0) && x.Alias.Equals(entry.Entity.Alias)); if (na != null && na.ID != entry.Entity.ID) { throw new ValidationException($"there is already a character registered with the alias '{na.Alias}'. Pick something else."); } } } var userChanges = ChangeTracker.Entries <User>().Where(x => x.State != EntityState.Unchanged).ToList(); if (userChanges != null) { for (int i = 0; i < userChanges.Count; i++) { userChanges[i].Entity.LastUpdate = DateTime.UtcNow; } } var res = base.SaveChanges(); return(res); } catch (DbUpdateException e) { //This either returns a error string, or null if it can’t handle that error var error = SaveChangesExceptionHandler(e, this); if (error != null) { Console.WriteLine(error); //return the error string } else { Console.WriteLine($"That's a database exception I don't know what to do with: {e.Message}"); } throw; //couldn’t handle that error, so rethrow } catch (Exception e) { if (e is ValidationException) { Console.WriteLine($"{(e as ValidationException).ValidationAttribute} with value {(e as ValidationException).Value} failed: {(e as ValidationException).ValidationResult}\n{e.Message}\n{e.StackTrace}"); } else { Console.WriteLine($"Exception in SaveChanges: \n{e.Message}\n{e.StackTrace}"); } var inner = e.InnerException; while (inner != null) { if (e is ValidationException) { Console.WriteLine($"{(e as ValidationException).ValidationAttribute} with value {(e as ValidationException).Value} failed: {(e as ValidationException).ValidationResult}\n{e.Message}\n{e.StackTrace}"); } else { Console.WriteLine($"Exception in SaveChanges: \n{e.Message}\n{e.StackTrace}"); } inner = inner.InnerException; } throw; } }
public void InsertUpdateOrDeleteGraph(object entity) { ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; if (entity is Character character) { var existing = Characters .AsNoTracking() .Include(c => c.Inventories) .ThenInclude(c => c.Items) .Include(c => c.WishList) .Include(c => c.Data) .ThenInclude(c => c.Locker) .ThenInclude(c => c.Items) .Include(c => c.Data) .ThenInclude(c => c.Trunk) .ThenInclude(c => c.Items) .FirstOrDefault(c => c.ID == character.ID); if (existing != null) { if (character.Inventories != null) { var existingItems = existing.Inventories.SelectMany(i => i.Items).ToList(); var currentItems = character.Inventories.SelectMany(i => i.Items).ToList(); foreach (var existingItem in existingItems) { if (currentItems.All(i => i.ID != existingItem.ID)) { Entry(existingItem).State = EntityState.Deleted; } } } if (character.WishList != null) { var existingWishList = existing.WishList.ToList(); var currentWishList = character.WishList.ToList(); foreach (var existingTrunkItem in existingWishList) { if (currentWishList.All(i => i.ID != existingTrunkItem.ID)) { Entry(existingTrunkItem).State = EntityState.Deleted; } } } if (character.Data?.Locker?.Items != null) { var existingLockerItems = existing.Data.Locker.Items.ToList(); var currentLockerItems = character.Data.Locker.Items.ToList(); foreach (var existingTrunkItem in existingLockerItems) { if (currentLockerItems.All(i => i.ID != existingTrunkItem.ID)) { Entry(existingTrunkItem).State = EntityState.Deleted; } } } if (character.Data?.Trunk?.Items != null) { var existingTrunkItems = existing.Data.Trunk.Items.ToList(); var currentTrunkItems = character.Data.Trunk.Items.ToList(); foreach (var existingTrunkItem in existingTrunkItems) { if (currentTrunkItems.All(i => i.ID != existingTrunkItem.ID)) { Entry(existingTrunkItem).State = EntityState.Deleted; } } } } } }