NHibernate延迟加载
1.和EF不同,NH的延迟加载不仅可以使用于关系而且可以使用于普通字段,用于在加载大数据时改进系统性能
2.默认情况下,hibernate对于字段(属性)的加载不使用延迟,对于关系的加载使用延迟
3.实现延迟加载
3.1 在xml中配置
<property name="PartName" lazy="true" column="PartName"></property>
使用这种方法设置可以改变hibernate对某些的字段或关系的加载策略,但是这种加载策略会在整个工程中一直沿用
3.2 查询过程中指定加载策略
3.2.1使用Criteria进行查询时可以使用
NHibernateUtil.Initialize(object);
使用这种方法进行贪婪加载时,需要显示指定贪婪加载的实例,如NHibernateUtil.Initialize(user.Part);
这样在循环过程中仍会产生N+1的问题
3.2.2使用HQL进行查询时
return session.CreateQuery(@" from User as user join fetch user.Part").List<User>();
使用fetch可以在进行join的同时将指定对象的非延迟加载项加载到缓存中