IsInitialized 不适用于 NHibernate LINQ
IsInitialized not working with NHibernate LINQ
我正在尝试确定是否已加载惰性集合,以便我知道是否将其包含在 DTO 中。下面是我的代码。
控制器
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,然后让断点通过它 returns 为真。
这是否意味着 NHibernate LINQ 提供程序损坏或者我在这里遗漏了什么?
谢谢
我猜 IsInitialized() returns 是假的,因为您还没有将提取应用到您实际执行的 IQueryable。尝试:
if (stockItems)
stores = stores.Fetch(s => s.StockItems);
During/after 调试,IsInitialized() returns true 因为调试器本身会在您探索对象时触发集合的延迟加载。
我正在尝试确定是否已加载惰性集合,以便我知道是否将其包含在 DTO 中。下面是我的代码。
控制器
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,然后让断点通过它 returns 为真。
这是否意味着 NHibernate LINQ 提供程序损坏或者我在这里遗漏了什么?
谢谢
我猜 IsInitialized() returns 是假的,因为您还没有将提取应用到您实际执行的 IQueryable。尝试:
if (stockItems)
stores = stores.Fetch(s => s.StockItems);
During/after 调试,IsInitialized() returns true 因为调试器本身会在您探索对象时触发集合的延迟加载。