使用ORM時,我通常會創建一個工廠方法來返回DataContext/ObjectContext實例,然後使用它來查詢數據源。我通常讓我的工廠返回基本上下文類;所以在EF4的情況下,我返回一個ObjectContext類型實例,而不是生成的「MyDBConext」實例。該方法的簽名看起來是這樣的:EF4 Eager通過ObjectContext base實例加載
ObjectContext CreateContext()
這種方法的createContext返回與LazyLoadingEnabled =虛假和ProxyCreationEnabled = FALSE選項的實例。當訪問實體集合時,我會調用類似ctx.CreateObjectSet()的方法,其中T當然是實體類型。
我注意到,當我使用ObjectContext類型實例而不是「MyDBConext」時,急切的加載似乎不起作用。
User result = null;
using(ObjectContext ctx = ContextFactory.CreateContext()) {
ObjectSet<User> userSet = ctx.CreateObjectSet<User>();
//userSet.Include(x => x.Roles);
userSet.Include("Roles");
result = userSet.SingleOrDefault(exp);
}
return result;
但改變using語句來像
using(MyDBConext ctx = new MyDBConext()) {
按預期工作。但爲什麼?我可以不通過基礎ObjectContext實例加載嗎?