2

我正在尝试加载所有Dish对象。DishDishImages 具有一对多的关系,即 aDish可以有许多DishImages 与之关联。

这是这两个类的代码。

  1. 盘子
  2. 碟形图像

这就是我试图在操作方法中检索它的方式:

    [ChildActionOnly]
    public PartialViewResult TopDishes()
    {
        IEnumerable<Dish> topDishes = dishRepository.Dishes.Include( d => d.DishImages );                                                        
        return PartialView(topDishes);
    }

这是查看代码:

  @model IEnumerable<RestaurantHub.Domain.Entities.Dish>

 @foreach (var dish in Model)
 {
    <div class="top-ten-offers-list">

      <div class="top-ten-offer">
        <p class="top-ten-deal-description">
            @dish.Description
        </p>

        <img src="@dish.DishImages.First().ImagePath" />
        <p class="top-ten-deal-title">@dish.Name</p>
     </div>

   </div>
}

我已经阅读了其中大多数建议使用的几个 SO 问题Include()(我正在这样做),其他人建议将 MARS 设置为 true。我相信我在这里遗漏了一些微妙的观点。任何帮助表示赞赏。

调试信息:

如果我将代码调试到操作方法,我可以验证(通过枚举结果)正在加载正确的数据。但是当控件到达foreach视图中的循环时,它会引发上述错误。

如果我@dish.DishImages.First().ImagePath从视图中删除该行,它可以正常工作,尽管我没有得到任何图像。

结果集的调试视图

4

2 回答 2

6
于 2013-08-05T07:38:24.310 回答
1

有什么充分的理由说明您使用 anIEnumerable而不将您的收藏具体化为List/ Array?我认为你的问题会消失,如果你将所有结果都存储到内存(ToList()/ ToArray())然后将它们交给你的视图,你可以在其中操作内存中的集合,但是你认为合适。

于 2013-08-05T06:53:33.310 回答