«Значение не может быть нулевым. Имя параметра: источник» при добавлении элемента из связанной таблицы в представлении - PullRequest
0 голосов
/ 30 мая 2020

в моем проекте у меня есть две таблицы: Restaurant (RestaurantId, Name, ...., Adress) и RestaurantReviews (ReviewsId, Mark, ...., RestaurantId). В моем PartialView я пытаюсь показать информацию о ресторане и вычислить среднюю оценку, но если я попытаюсь рассчитать среднюю оценку, я получаю ошибку:

ArgumentNullException: Value cannot be null. (Parameter 'source')

RestaurantModel

public class Restaurant
  {
    [Key]
    public int RestaurantId{ get; set; }

    ....

    [Required(ErrorMessage = "Restaurant name is empty")]
    public string Name{ get; set; }

    ....

    public virtual ICollection<RestaurantReviews> RestaurantReviews{ get; set; }

RestaurantReviewsModel

public class RestaurantReviews
  {
    [Key]
    public int RestaurantReviewsId { get; set; }

    ....

    [Required(ErrorMessage = "Restaurant mark is empty")]
    public int Mark{ get; set; }

    [ForeignKey("Restaurant")]
    public int RestaurantId { get; set; }

    public virtual  Restaurant Restaurant {get; set; }

DbContext

 public DbSet<Restaurant> Restaurant { get; set; }
 public DbSet<RestaurantReviews> RestaurantReviews{ get; set; }

Вызываемые PartialViews

@await Html.PartialAsync("~/Views/Restaurant/RestaurantWidget.cshtml", (IEnumerable<Firma.Data.Data.CMS.Restaurant>)ViewBag.RestaurantWidget)

RestaurantWidget.cs html

@model IEnumerable<Firma.Data.Data.CMS.Restaurant>


@foreach (var item in Model)
{
    ...
    @item.Name
    ...

    //Without this line everything is ok
    @item.RestaurantReviews.Average(x=>x.Mark)
    //Without this line everything is ok

   ...
}

Контроллер

public IActionResult Index()
  {
     ViewBag.RestaurantWidget=
        (
           from restaurant in _context.Restaurant
           select restaurant 
           ).Take(5).ToList();
        return View();
  }

Дополнительная информация: Каждый ресторан имеет хотя бы одну оценку . Нет ресторана, который не имел бы рейтинга

1 Ответ

0 голосов
/ 30 мая 2020

Я нахожу ответ на свой вопрос в Контроллере я меняю

public IActionResult Index()
  {
     ViewBag.RestaurantWidget=
        (
           from restaurant in _context.Restaurant
           select restaurant 
           ).Take(5).ToList();
        return View();
  }

на код ниже

ViewBag.RestaurantWidget= _context.Restaurant.Include(p=>p.RestaurantReviews).Take(4).ToList();

...