У меня есть две таблицы связанных данных со свойствами навигации. Когда я пытаюсь обновить данные, родительские данные обновляются, но соответствующие данные не обновляются, и у меня также возникает ошибка исключения нулевой ссылки. Мне нужна помощь, чтобы понять, почему и что я могу сделать, чтобы исправить это, и если мои настройки верны. Я прочитал документацию, но досадно, она направлена на обновление выпадающего списка, который не очень мне помогает.
Вот мои классы сущностей:
Car.cs
namespace MyProject.Data
{
public class Car : BaseEntity
{
public string Make { get; set; }
public string Model { get; set; }
public int Reg { get; set; }
public ICollection<Hire> Hires { get; set; }
}
}
Hire.cs
namespace MyProject.Data
{
public class Hire
{
public int HireId { get; set; }
public DateTime? HireDate { get; set; }
}
}
Таким образом, как вы можете видеть выше, со свойствами навигации у одного 'Car' может быть много 'Hires ». Нет, это то, как я отображаю эту информацию в моем редактируемом виде, я не уверен, что перечисляю по машинам, не похоже, что это совершенно правильно.
@model IEnumerable<MyProject.Data.Car>
<form id="carEditForm" asp-controller="Car" asp-action="Edit" method="post" asp-antiforgery="true">
@foreach (var car in Model)
{
<!-- /Car Data -->
<input type="text" asp-for="@car.Make" name="Make" />
<input type="text" asp-for="@car.Model" name="Model" />
<!-- /Hire Data -->
@foreach (var hire in item.Hires)
{
<input type="text" asp-for="@hire.HireDate" name="HireDate" />
}
<button type="submit" class="btn btn-primary">Update</button>
</form>
Вот мой код редактирования для обновления всех дат в обеих таблицах.
[HttpPost]
[AutoValidateAntiforgeryToken]
public IActionResult Edit(Car car)
{
var data = _context.Car
.AsNoTracking()
.Include(t => t.Hires)
.FirstOrDefault(i => i.Id.Equals(car.Id));
_context.Car.Update(car);
foreach (var hire in data.Hires)
{
_context.Hire.Update(hire);
}
_context.SaveChanges();
return View();
}
public IActionResult Edit(int id)
{
var data = _context.Car.Include(d => d.Hires).Where(v => v.Id == id);
return View(data);
}
Когда я пытаюсь обновить свои данные, я получаю следующую ошибку исключения нулевой ссылки, у меня есть ощущение, что это связано с тем, что машина перечислена более, я не уверен:
NullReferenceException: ссылка на объект не установлена для экземпляра объекта. @foreach (var car in Model)
Таблица 'Car' обновлена, а 'Hire' - нет. Я думаю, что мои настройки не совсем верны, и я хотел бы получить помощь, чтобы это исправить.