// To protect from overposting attacks, see https://aka.ms/RazorPagesCRUD public async Task <IActionResult> OnPostAsync(int roomNumber, int dungeonID) { AddedMessage = ""; // get enemy ids which are already associated with this room var taken_enemy_ids = await _context.LootInRooms .Where(lir => (lir.DungeonID == dungeonID && lir.RoomNum == roomNumber)) .Select(lir => lir.LootID) .ToListAsync(); // get enemyInSets which are associated with the chosen set but not with an enemy in the previous list var liss = await _context.LootInSets .Where(lis => (lis.LootSetID == LootSetID && !taken_enemy_ids.Contains(lis.LootID))) .Include(lis => lis.Loot) .ToListAsync(); // add set // foreach lis // create a copy lir // for each enemy in the set foreach (LootInSet lis in liss) { // make a new LIR LootInRoom emptyLIR = new LootInRoom(); // link LIR to proper room emptyLIR.DungeonID = dungeonID; emptyLIR.RoomNum = roomNumber; // copy data from lis emptyLIR.LootID = lis.LootID; emptyLIR.Count = lis.Count; emptyLIR.Name = lis.Name; emptyLIR.Description = lis.Description; // add LIR to database _context.LootInRooms.Add(emptyLIR); await _context.SaveChangesAsync(); AddedMessage += $"Added {(lis.Name == null ? lis.Loot.Name : lis.Name)} x{lis.Count}\n"; } // remove trailing newline AddedMessage.Trim('\n'); // return to adding page return(RedirectToAction("./AddLootSet", new { roomNumber, dungeonID, addedMessage = AddedMessage })); }
// To protect from overposting attacks, see https://aka.ms/RazorPagesCRUD public async Task <IActionResult> OnPostAsync(int roomNumber, int dungeonID) { AddedMessage = ""; // get enemy ids which are already associated with this room var taken_enemy_ids = await _context.EnemyInRooms .Where(eir => (eir.DungeonID == dungeonID && eir.RoomNum == roomNumber)) .Select(eir => eir.EnemyID) .ToListAsync(); // get enemyInSets which are associated with the chosen set but not with an enemy in the previous list var eiss = await _context.EnemyInSets .Where(eis => (eis.EnemySetID == EnemySetID && !taken_enemy_ids.Contains(eis.EnemyID))) .Include(eis => eis.Enemy) .ToListAsync(); // add set // foreach eis // create a copy eir // for each enemy in the set foreach (EnemyInSet eis in eiss) { // make a new EIR EnemyInRoom emptyEIR = new EnemyInRoom(); // link EIR to proper room emptyEIR.DungeonID = dungeonID; emptyEIR.RoomNum = roomNumber; // copy data from eis emptyEIR.EnemyID = eis.EnemyID; emptyEIR.Count = eis.Count; emptyEIR.Name = eis.Name; emptyEIR.Description = eis.Description; // add EIR to database _context.EnemyInRooms.Add(emptyEIR); await _context.SaveChangesAsync(); AddedMessage += $"Added {(eis.Name == null ? eis.Enemy.Name : eis.Name)} x{eis.Count}\n"; } // remove trailing newline AddedMessage.Trim('\n'); // return to adding page return(RedirectToAction("./AddEnemySet", new { roomNumber, dungeonID, saveChangesError = true })); }