2

Dishすべてのオブジェクトをロードしようとしています。DishDishImageには 1 対多の関係があります。つまり、Dishに多数DishImageの を関連付けることができます。

両方のクラスのコードを次に示します。

  1. 料理画像

これは、アクションメソッドで取得しようとしている方法です:

    [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

IEnumerableを使用していて、コレクションをList/にマテリアライズしない正当な理由はありますArrayか? ToList()すべての結果をメモリ ( / ToArray()) に取得し、それらをビューに渡して、メモリ内コレクションを適切に操作できるようにすると、問題はなくなると思います。

于 2013-08-05T06:53:33.310 に答える