我可以为每个查询定义每个datacontext的预先加载吗?

时间:2011-05-26 09:31:56

标签: c# entity-framework datacontext eager-loading

有没有办法定义每个整个数据上下文的热切加载,所以我可以说出这样的事情 - “在加载Customer时使用这个数据上下文时总是加载相关的城市”?

因此,与Linq to Sql中的Options和LoadWith非常相似。

3 个答案:

答案 0 :(得分:3)

没有实体框架不提供与Linq-to-Sql中可用的DataLoadOptions等效的内容。无法全局定义LoadWithAssociateWith等内容。

答案 1 :(得分:1)

就像拉迪斯拉夫所说,目前在EF中没有办法做到这一点。但是,问题又回到了为什么要在全局范围内而不是在每个查询的基础上进行此操作。

如果你的主要目的是从你的业务层中抽象出急切的加载,那么我可以选择在我写的here博客文章中做一些像我所描述的那样的事情。本质上它描述了我想要创建的库(时间允许),它通过查看查询应该基于的数据结构自动确定如何加载。

但是,如果没有更详细的全球原因,我不知道这是否会解决您正在尝试做的核心问题

答案 2 :(得分:0)

您可以在DataContext的构造函数中定义数据加载选项:

public MyDataContext() : 
  base(global::System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString, mappingSource)
{
    DataLoadOptions options = new DataLoadOptions();
    options.LoadWith<Customer>(o => o.City);
    this.LoadOptions = options;
    OnCreated();
}

每次都会急切加载该属性。