c# - 为 LINQ 上下文禁用所有延迟加载或强制预加载

标签 c# linq linq-to-sql lazy-loading eager-loading

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

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

有什么方法可以禁用上下文的延迟加载或显式启用预加载以忽略延迟加载属性?也许扩展数据库上下文类并覆盖某些东西?

最佳答案

您需要设置 DeferredLoadingEnabled ,然后使用一些反射来包含每个属性,例如:

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<Func<SomeThingyClass, object>>) lambda);
}

关于c# - 为 LINQ 上下文禁用所有延迟加载或强制预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388276/

相关文章:

c# - 比较 List 中的所有项目并返回新列表

asp.net-mvc - 使用 LINQ 查询排除特定记录

c# - 比较线程是否相等

c# - 当基础类型*可能*不同时,接口(interface)作为属性返回类型?

c# - 是否有可能在 .NET 中使用所有相同的字符生成 GUID? (例如 : {11111111-1111-1111-1111-111111111111})

c# - 如何在 LINQ 中以更简洁的方式编写此示例?

c# - 过滤表中不包含 List<string> 中的项目的 DataTable

c# - Linq to SQL,更新多行

c# - Linq to SQL - 分组依据和计数

sql-server - 什么会导致 linq to sql 认为参数可以为空?