0

我在理解和使用 Include 命令时遇到了问题,主要是在处理 nopCommerce 1.9 站点时,但我到处都有同样的问题。我已经在网上搜索过,并且在 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 模型:

  1. 更改Include"ProductVariants"

    var products = _context.Products.Include("ProductVariants");
    
  2. 更改您访问的属性NpProductVariants

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