我在理解和使用 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,直到我尝试访问需要额外查询的属性。
我认为问题很清楚,但我做错了什么?
任何帮助将非常感激。
谢谢。
标记