实体框架急切加载不加载所有数据

时间:2019-10-22 18:46:33

标签: c# entity-framework linq-to-sql entity-framework-6

使用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()执行查询,就可以更改项目。我在想什么?

0 个答案:

没有答案