public async Task<ActionResult> Edit(CharacterEditViewModel model) { var userId = User.Identity.GetUserId(); if (ModelState.IsValid) { var character = model.ToCharacter(); if (!await db.Characters.AnyAsync(c => c.Id == character.Id)) { if ( !await db.Characters.AnyAsync( c => c.GameId == character.GameId && c.Name == character.Name)) { character.UserId = userId; db.Characters.Add(character); } else { ModelState.AddModelError("Name", "A Character with this name already exists for this game."); model.Games = await db.Games.ToDictionaryAsync(g => (int)g.GameId, g => g.Name); ViewBag.Title = "Add Character"; return View(model); } } else { if (await db.Characters.AnyAsync(c => c.Id == character.Id && c.UserId == userId)) { character.UserId = userId; db.Entry(character).State = EntityState.Modified; } } await db.SaveChangesAsync(); return RedirectToAction("Manage", "Account"); } ViewBag.Title = model.Id == 0 ? "Add Character" : "Edit Character"; return View(model); }