2016-11-23 37 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