首先,我使用Code First方法使用EF 6.0。 我的上下文配置設置爲啓用「代理創建」和「延遲加載」。實體框架 - 延遲加載即使使用ToList()
我的問題是: 延遲加載是否應該返回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方法返回的實體啓用了(在debbug模式下,我可以看到醜陋的哈希像:System.Data.Entity.DynamicProxies.Company_7035BEA374959AC1 ...)。
延遲加載甚至可以在不同的DLL上調用它。它是否正確?我的意思是,即使我的方法返回一個IEnumerable(而不是IQueriable),一個不同的DLL可以在我的數據庫中進行後續調用嗎?
任何澄清將不勝感激。