2016-11-23 7 views
0

遅延コレクションがロードされているかどうかを調べようとしているので、DTOにインクルードするかどうかを知っています。以下は私のコードです。 itemsFetchedさ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; 
    } 

問題は常にfalseですが、私はそれにブレークポイントを入れている場合、その後StockItemsを見てVSデバッガを使用しますブレークポイントをtrueに戻します。

これは、NHibernate LINQプロバイダが壊れているか、ここで何か不足していることを意味しますか?

おかげ

+0

'StoreRepository.GetList()'のコードを投稿できますか? –

答えて

2

私はあなたが実際に実行されたIQueryableにフェッチ適用されていないためIsInitialized()がfalseを返すことを推測します。試してみてください:

あなたがオブジェクトを探索するとき、デバッガ自体がコレクションの遅延ロードをトリガするため、デバッグ後、IsInitialized()がtrueを返す時には/
if (stockItems) 
    stores = stores.Fetch(s => s.StockItems); 

+0

それはトリックをした、ありがとう! – user2119597

関連する問題