2008-12-22 118 views
4

我刚开始使用NHibernate和流利NHibernate,我认为它很棒。我一直在配置所有的映射,以便在类之间的任何关系中使用LazyLoading,因为通常我发现不需要预先加载所有的东西。但是,有时您知道100%您将加载所有关系或至少一个关系,并且如果您事先获得数据,它将保存额外的连接。更改NHibernate中的初始LazyLoad行为

有无论如何,你可以告诉NHibernate加载一个关系的关系数据并覆盖初始设置?

我之前使用LinqToSql,为此我会创造条件,具有过载什么项目应该载入中关系时neccesary库。这工作得非常好,所以我想为NHibernate提供类似的东西。

回答

7

我发现这是可以使用的NHibernate查询的惰性加载/预先加载功能。

以正常的方式创建您的ICriteria,然后组织名称(关系属性,对我来说是价格),然后将提取类型可以加入,选择,lazyload,渴望

.SetFetchMode("Prices", FetchMode.Join) 
0

如果你是执行HQL,你可以使用“左外连接获取”或“左连接获取”来加入你想要获取的关联,而不是延迟加载,例如

如果您有有一个属性返回一个地址对象建筑类这种关系是延迟加载,你可能必须HQL类似于:

string hql = "from Building bld where bld.Type.Id = 1"; 

当地址属性是每个建筑访问另一个SQL语句将被执行。更改HQL到下面将获取地址作为原始SQL语句的一部分:

string hql = "from Building bld left outer join fetch bld.Address as addr where bld.Type.Id = 1";