0

主に nopCommerce 1.9 サイトで作業する場合、Include コマンドの理解と使用に問題がありますが、どこでも同じ問題があります。私はネットとstackoverflowを検索しましたが、同じ問題を抱えている人を他に見つけることができないようです.

問題は非常に単純だと思いますが、明白です。親エンティティを照会するときに子エンティティを含めると、EF はすべてのエンティティを読み込みますが、コレクションは読み込まないため、コレクションにアクセスしようとすると、EF は元に戻ります。コレクションをロードするデータベース。

明確にするために、次のことを考慮してください。

var products = (from p in _context.Products.Include("NpProductVariants") select p).ToList();

var productvariant = products.ProductVariants[2]; //Loads the NpProductVariants collection

追加のフェッチは不要だと思います。実際、ホルダーを使用してナビゲーション コレクションとコードを保持するオブジェクトを作成すると、それ以上のフェッチを回避できますが、これは面倒です。

var products = (from p in _context.Products.Include("NpProductVariants") select new productholder() { product = p, variants = p.NpProductVariants }).ToList();

これは、コレクションを保存できるため、クエリの実行中にコレクションを使用できることを証明していますが、追加のクエリを必要とするプロパティにアクセスしようとするまで、ObjectContext に添付されているように自動的に表示されません。

問題は明らかだと思いますが、何が間違っていますか?

どんな助けでも大歓迎です。

ありがとう。

マーク

4

1 に答える 1

0

を含め"NpProductVariants"ていますが、 にアクセスしていますProductVariants

実際の EF モデルに応じて、次の 2 つのことができます。

  1. を次のように変更Include"ProductVariants"ます。

    var products = _context.Products.Include("ProductVariants");
    
  2. アクセスするプロパティを変更しますNpProductVariants:

    var productvariant = products.NpProductVariants[2];
    
于 2013-02-07T09:32:17.543 に答える