Почему мои связанные данные не обновляются и выдают пустую ссылку в моем базовом приложении ASP. NET? - PullRequest
0 голосов
/ 23 января 2020

У меня есть две таблицы связанных данных со свойствами навигации. Когда я пытаюсь обновить данные, родительские данные обновляются, но соответствующие данные не обновляются, и у меня также возникает ошибка исключения нулевой ссылки. Мне нужна помощь, чтобы понять, почему и что я могу сделать, чтобы исправить это, и если мои настройки верны. Я прочитал документацию, но досадно, она направлена ​​на обновление выпадающего списка, который не очень мне помогает.

Вот мои классы сущностей:

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' - нет. Я думаю, что мои настройки не совсем верны, и я хотел бы получить помощь, чтобы это исправить.

1 Ответ

1 голос
/ 23 января 2020

Я думаю, вам нужно передать коллекцию для просмотра в качестве модели в методе, где "carEditForm" Может быть такой:

return View(cars);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...