【发布时间】:2014-03-07 12:34:05
【问题描述】:
首先,我使用的是 EF 6.0 和 Code First 方法。
我的context 配置设置为启用“代理创建”和“延迟加载”。
我的问题是:
延迟加载是否适用于返回 IEnumerable(而不是 IQueryable)的方法的结果?
我觉得下面的代码更能说明问题:
public void Test()
{
var company = GetCompanies().FirstOrDefault();
if (company.Employees.Count() > 0)
{
//I got here without errors!
}
}
public IEnumerable<Company> GetCompanies()
{
var company = context.Companies.ToList();
//Note that I did not Include the Employee (child table)
return company;
}
请注意我所说的评论:“我没有错误地来到这里!”。这意味着即使在 ToList() 调用之后,延迟加载仍然有效。我认为在将IQueryable 转换为List 或IEnumerable 之后,EF 将失去进行延迟加载的能力。
我注意到代理仍然为GetCompanies 方法返回的实体启用(在调试模式下,我可以看到丑陋的哈希值:System.Data.Entity.DynamicProxies.Company_7035BEA374959AC1...)。
即使在不同的 DLL 上调用延迟加载也能正常工作。它是否正确?我的意思是,即使我的方法返回 IEnumerable(而不是 IQueryable),其他 DLL 是否可以在我的数据库中进行后续调用?
任何澄清将不胜感激。
【问题讨论】:
标签: c# entity-framework