【问题标题】:Entity Framework 4.1 default eager loadingEntity Framework 4.1 默认预加载
【发布时间】:2011-08-27 20:58:45
【问题描述】:

我正在使用 Entity Framework 4.1 代码优先方法。

我想将预先加载作为我的默认配置,从而避免在每个获取查询中使用 Include 扩展方法。

我按照 MSDN 中的建议做了,在 DbContext 构造函数中更改了简单的惰性属性:

public class EMarketContext : DbContext
{
    public EMarketContext()
    {
        // Change the default lazy loading to eager loading
        this.Configuration.LazyLoadingEnabled = false; 
    }
}

不幸的是,这种方法行不通。我必须使用 Include 方法在每个查询中执行预先加载。任何想法为什么? 提前致谢。

【问题讨论】:

    标签: entity-framework entity-framework-4.1 eager-loading


    【解决方案1】:

    预加载没有默认配置。您必须始终定义Include 或创建一些可重用的方法来包装添加包含。例如,您可以将类似的方法放置到您的上下文中:

    public IQueryable<MyEntity> GetMyEntities()
    {
        return this.MyEntities.Include(e => e.SomeOtherEntities);
    }
    

    【讨论】:

    • 根据 ADO.Net 开发人员的说法,您错了。看看这个:blogs.msdn.com/b/adonet/archive/2011/01/31/…
    • 不,我没有错。我知道这篇文章,没有任何部分可以描述“永久Include
    • 请看(中间):“关闭所有实体的延迟加载”。
    • 但它不会将延迟加载更改为急切加载。它只是关闭延迟加载。急切加载仍然是Include进行的手动操作
    • @LadislavMrnka - Include 只会急切加载一个投影。如果您需要进一步急切加载怎么办? .Include( entity => entity.FirstCollection.Select( fc => fc.FirstProjection.Select( 此投影无法生成正确定义的 SQL 语句 )))
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多