C# 改变NHibernate中的初始懒散负荷行为

C# 改变NHibernate中的初始懒散负荷行为,c#,.net,nhibernate,orm,C#,.net,Nhibernate,Orm,我刚刚开始使用NHibernate和流利的NHibernate,我认为这很好。我已经将所有映射配置为对类之间的任何关系使用LazyLoading,因为通常我发现不需要预先加载所有内容。但是,有时您100%地知道您将加载所有关系或至少一个关系,如果您提前获得数据,它将保存额外的连接 您是否可以告诉NHibernate加载关系的关系数据并覆盖初始设置 我以前使用过LinqToSql,因为我会创建一个存储库,在必要时,它会重载哪些项目应该在哪些关系中加载。这真的很好,所以我希望类似的NHibernat

我刚刚开始使用NHibernate和流利的NHibernate,我认为这很好。我已经将所有映射配置为对类之间的任何关系使用LazyLoading,因为通常我发现不需要预先加载所有内容。但是,有时您100%地知道您将加载所有关系或至少一个关系,如果您提前获得数据,它将保存额外的连接

您是否可以告诉NHibernate加载关系的关系数据并覆盖初始设置


我以前使用过LinqToSql,因为我会创建一个存储库,在必要时,它会重载哪些项目应该在哪些关系中加载。这真的很好,所以我希望类似的NHibernate

我发现这可以用于NHibernate查询的懒散加载/急切加载特性

以正常方式创建ICriteria,然后是关联名称(关系属性,对我来说是prices),然后是获取类型,可以是join、select、lazyload和eager

.SetFetchMode("Prices", FetchMode.Join)

如果您正在执行HQL,您可以使用“左外部连接获取”或“左连接获取”来加入您希望获取的关联,而不是延迟加载的关联,例如

如果您有一个具有返回地址对象的属性的建筑类,并且此关系是延迟加载的,那么您可能有类似于以下内容的HQL:

string hql = "from Building bld where bld.Type.Id = 1";
当访问每个建筑的Address属性时,将执行另一个SQL语句。将HQL更改为以下值将获取作为原始SQL语句一部分的地址:

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