【问题标题】:How to join using NHibernate QueryOver如何使用 NHibernate QueryOver 加入
【发布时间】:2012-03-27 19:32:57
【问题描述】:

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

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 中尝试做的事情。

【问题讨论】:

  • 询问您在 SQL 中尝试实现的目标可能对您更有益。我不确定您要通过上述方式做什么。

标签: nhibernate queryover


【解决方案1】:

最简单的方法:

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”(不是代理)

【讨论】:

  • 什么是employeeGroup??您尚未创建别名,这将失败
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
相关资源
最近更新 更多