禁用LINQ上下文的所有延迟加载或强制加载加载

我有一个文档生成器,目前包含大约200个项目的查询,但完成后可能会超过500个。 我最近注意到一些映射表示延迟加载。 这给文档生成器带来了问题,因为它需要根据生成的文档访问所有这些属性。

虽然我知道可以为上下文指定的DataLoadOptions ,但这会导致我必须显式指定可能加载的每一列。 这是1000的北方,因为所有数据提取都发生在一个上下文中。

有没有办法让我为上下文禁用延迟加载或显式启用急切加载以忽略延迟加载属性? 也许扩展DB上下文类并覆盖某些东西?

您将需要设置DeferredLoadingEnabled ,然后使用一些reflection包括每个属性,如:

 DataLoadOptions dataLoadOptions = new DataLoadOptions(); foreach (PropertyInfo pi in typeof(SomeThingyClass).GetProperties()) { ParameterExpression paramExp = Expression.Parameter(typeof(SomeThingyClass), "s"); Expression expr = Expression.Convert(Expression.Property(paramExp, pi.Name), typeof(object)); LambdaExpression lambda = Expression.Lambda(expr, paramExp); dataLoadOptions.LoadWith((Expression>) lambda); } 

LINQ to SQL很棘手。 简而言之,这取决于。

如果您的实体布局的方式使您有一个反映这种情况的关系:

Customers -> Orders -> OrderDetails

而且你需要评估所有3个实体的属性才能做出决定,最好的办法就是写一个连接。 使用.LoadWith将使用单个语句获取CustomersOrders ,但随后将为每个OrderDetails记录发出查询。

因此,即使您确实使用LoadWith指定了每个子关系,也不会获得发出的单个查询来检索结果。