我在理解和使用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。
我认为问题很清楚,但我做错了什么?
非常感谢任何帮助。
感谢。
标记
答案 0 :(得分:0)
您包括"NpProductVariants"
,但您正在访问ProductVariants
。
根据您的实际EF模型,您可以做两件事:
将Include
更改为"ProductVariants"
:
var products = _context.Products.Include("ProductVariants");
将您访问的媒体资源更改为NpProductVariants
:
var productvariant = products.NpProductVariants[2];