ПРОБЛЕМА:
Проблема в том, что я не знаю, как обновить мои 2 таблицы.
мой ввод работает и передает значения в sendDefence
и sendName
. Но как изменить эти значения в 2 таблицах?
ОШИБКА:
DbUpdateConcurrencyException: ожидается, что операция с базой данных повлияет на 1 строку (и), но фактически повлияет на 0 строку (и),Данные могут быть изменены или удалены, так как объекты были загружены. См. http://go.microsoft.com/fwlink/?LinkId=527962 для получения информации о понимании и обработке исключений оптимистичного параллелизма.
WebGame.Controllers.TowersController.Edit (int id, EditViewModel editViewModel) в TowersController.cs
await _context.SaveChangesAsync();
EditViewModel.cs
public class EditViewModel
{
public World World { get; set; }
public Tower Tower { get; set; }
}
Edit.Html
@model WebGame.ViewModel.EditViewModel
<div class="row">
<div class="col-md-4">
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="World.WorldId" />
<div class="form-group">
<label asp-for="World.Player1Name" class="control-label"></label>
<input asp-for="World.Player1Name" class="form-control" />
<span asp-validation-for="World.Player1Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Tower.Defence" class="control-label"></label>
<input asp-for="Tower.Defence" class="form-control" />
<span asp-validation-for="Tower.Defence" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</form>
</div>
</div>
Контроллер
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, EditViewModel editViewModel)
{
if (ModelState.IsValid)
{
try
{
int? sendDefence = editViewModel.Tower.Defence;
string sendName = editViewModel.World.Player1Name;
Tower tower = new Tower();
tower.Defence = sendDefence;
_context.Update(tower);
World world = new World();
world.Player1Name = sendName;
_context.Update(world);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TowerExists(editViewModel.World.WorldId))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(nameof(Index));
}