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