使用Entity Framework 6,我试图通过急切的加载来加载具有许多子对象的对象图。
每个产品都有一个ProductDefinitions集合,每个ProductDefinition有一个文档集合,每个文档都有一个DocumentDetail。出于应用程序的目的,我需要在此时加载所有数据。
using (DatabaseEntities db = new DatabaseEntities())
{
products = (from p in db.Products select p)
.Include(p => p.ProductDefinition)
.Include(p => p.ProductDefinition.Select(y=>y.ProductDocument))
.Include(p => p.ProductDefinition.Select(y => y.ProductDocument.Select(o=>o.DocumentDetail)))
.ToList();
}
一旦检索到产品,我可以使用“调试器立即窗口”检查特定产品。
var productOfInterest = products.Single(p=>p.ProductIndex == "123456");
浏览“本地”窗口,可以看到有129个与该产品相关的文档。 但是,它缺少一个记录。
在初始商品查询之后,我可以添加与感兴趣的商品相关的另一个查询:
using (DatabaseEntities db = new DatabaseEntities())
{
products = (from p in db.Products select p)
.Include(p => p.ProductDefinition)
.Include(p => p.ProductDefinition.Select(y=>y.ProductDocument))
.Include(p => p.ProductDefinition.Select(y => y.ProductDocument.Select(o=>o.DocumentDetail)))
.ToList();
var docs = (from d in db.ProductDocument
where d.ProductDefinitionID == 1092
select d).ToList();
然后运行相同的立即窗口命令:
var productOfInterest = products.Single(p=>p.ProductIndex == "123456");
但是现在通过“本地”窗口检查产品时,我发现有130个文档。
对于为什么急切的加载在没有第二个查询的情况下无法捕获该文档,以及为什么第二个查询根本改变了结果,我感到很困惑。
编辑:
设置两个变量查询后,逐步遍历两个查询,可以查看并查看这129个项目。跳过下一个查询,产品中的值将更新为130个项目。
我不认为一旦通过调用.ToList()执行查询,就可以更改项目。我在想什么?