2012-06-27 77 views
0

我正在研究一個企業應用程序,它利用EF 4.1上的存儲庫模式,並將其預先加載到POCO實體。通常情況下,調用將是這樣的:EF 4.1中的POCO實體和IsLoaded()

public IEnumerable<SomeEntity> List(DateTime date) 
{ 
    using (var context = ContextFactory.CreateContext()) // Returns a DbContext 
    { 
     return CreateQuery<SomeEntity>(context) 
     .Include("PATH1") 
     .Include("PATH2") 
     .Where(...)     
     .AsNoTracking() 
     .ToList(); 
    } 
} 

在某一點上,業務層會將這些實體爲DTO的,然後可通過WCF發送到Web應用程序。由於急切的加載是相當昂貴的,我試圖保持.include的到最低限度,所以有時候相關的屬性(急切地)加載,有時它們不是。然而,業務層並不知道相關屬性何時出現在實體中,因此我得到了一個ObjectContextDisposedException,其原因對我來說是完全清楚的,我不打算改變基本策略(即在急切地加載實體)。但是,我需要檢查一個特定的相關屬性是否被加載,檢查相關對象是否爲空不起作用(ObjectContextDisposedException),也沒有任何可以使用的IsLoaded()方法。

我在這裏遇到try/catch塊還是還有其他選項?

回答

2

關閉延遲加載並檢查爲空將工作。您當前的解決方案無法使用延遲加載,因爲您在運行查詢後立即處理上下文:

context.Configuration.LazyLoadingEnabled = false; 
+0

感謝一堆,這確實有竅門! –