如何使用NHibernate QueryOver加入

时间:2012-03-27 19:32:58

标签: nhibernate queryover

我的代码中存在以下情况,但无法解决。情况 -

var grpA = Session.QueryOver(() => _employeeGroupRelation));
var grpB = Session.QueryOver(() => _employeeGroup));

// var grpC should join grpA and grpB on _employeeGroupRelation.groupID = _employeeGroup.ID 

问题 - 有没有办法使用QueryOver语法加入grpA和grpB? 是否可以在不使用grpA或grpB上的List()的情况下执行此操作,因为它们中的每一个都将保存接近10,000条记录,并且我不想将它们转储到内存中。 这是QueryOver的正确用法吗?是否有更清洁的方法来实现我想要解决的问题?

这可能是一个基本的疑问,但我是NHib和QueryOver的新手。

修改 -

select * from employeeGroup a
inner join employeeGroupRelation b on a.ID = b.ID 

这就是我在SQL中尝试做的事情。

1 个答案:

答案 0 :(得分:8)

最简单的方法:

session.QueryOver<EmployeeGroup>()
   .JoinQueryOver(employeeGroup => employeeGroup.EmployeeGroupRelation)
   .Take(1000) // The same as top in SQL, if you don't want load all of entities
   .TransformUsing(Transformers.DistinctRootEntity)
   .List();

“JoinQueryOver”将“EmployeeGroup”和相关的“EmployeeGroupRelation”作为代理(取决于映射)获取LazyLoad

如果您不想使用LazyLoad,可以执行以下操作:

session.QueryOver<EmployeeGroup>()
   .Fetch(employeeGroup => employeeGroup.EmployeeGroupRelation).Eager
   .Take(1000) // The same as top in SQL, if you don't want load all of entities
   .TransformUsing(Transformers.DistinctRootEntity)
   .List();

“Fetch”获取“EmployeeGroup”和相关的“EmployeeGroupRelation”(非代理)