实体框架4 Linq包括不加载集合

时间:2013-02-07 09:20:48

标签: linq entity-framework-4 nopcommerce

我在理解和使用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。

我认为问题很清楚,但我做错了什么?

非常感谢任何帮助。

感谢。

标记

1 个答案:

答案 0 :(得分:0)

您包括"NpProductVariants",但您正在访问ProductVariants

根据您的实际EF模型,您可以做两件事:

  1. Include更改为"ProductVariants"

    var products = _context.Products.Include("ProductVariants");
    
  2. 将您访问的媒体资源更改为NpProductVariants

    var productvariant = products.NpProductVariants[2];