2016-11-23 63 views
0

我試圖找出是否已加載懶集合,所以我知道是否將它包含在DTO中。以下是我的代碼。IsInitialized不能與NHibernate的LINQ

控制器

IEnumerable<Store> stores = StoreService.GetList(new int[] { 1, 2}, true); 

StoreDTO tStore = StoreService.GetDTO(stores.First()); 

StoreService

public IEnumerable<Store> GetList(int[] Ids, bool stockItems = false) 
    { 
     IQueryable<Store> stores = StoreRepository.GetList(Ids); 

     if (stockItems) 
      stores.Fetch(s => s.StockItems); 

     return stores.ToList(); 
    } 

public StoreDTO GetDTO(Store store) 
    { 
     StoreDTO storeDTO = Mapper.Map<Store, StoreDTO>(store); 

     bool itemsFetched = NHibernate.NHibernateUtil.IsInitialized(store.StockItems); 

     if(itemsFetched) { /** do stuff **/ } 

     return storeDTO; 
    } 

問題是itemsFetched始終是假的,但如果我把一個破發點就可以了,然後用VS調試器來看看StockItems然後讓中斷點返回true。

這是否意味着NHibernate的LINQ提供程序被破壞或我在這裏丟失了什麼?

感謝

+0

你可以發佈'StoreRepository.GetList()'的代碼嗎? –

回答

2

我猜想,將IsInitialized(),因爲你還沒有應用到取你實際上執行的IQueryable返回false。嘗試:

if (stockItems) 
    stores = stores.Fetch(s => s.StockItems); 

在/調試完畢後,將IsInitialized(),因爲調試器本身會觸發集合的延遲加載,當你探索的對象返回true。

+0

這樣做,謝謝! – user2119597