【发布时间】:2013-05-10 14:41:56
【问题描述】:
我在 c# 应用程序中使用 Nhibernate。
我正在使用“CreateSQLQuery”从数据库中加载对象列表。 问题是我还希望同时填充该对象的属性之一。
例如 给定对象: 公司 员工
我有一个如下所示的 SQL 查询:
SELECT DISTINCT {e.*}, {c.*}
FROM Employee e
INNER JOIN Company c on e.company = c.id
(实际查询要复杂得多,这就是为什么我不能只使用条件 API 或 linq。)
我的代码是这样的:
ISQLQuery sql = session.CreateSQLQuery(sqlText);
sql.AddEntity(e", typeof(Employee));
sql.AddJoin("c", "e.Company");
sql.SetResultTransformer(new DistinctRootEntityResultTransformer());
dbEmlpoyees = sql.List<Employee>().ToList();
但是,这似乎返回了一个扁平列表(即返回了 Employee 和 Company 对象)。 我只希望返回 Exployee 对象,但我希望填充 Employee 的 Company 属性。这可以在一个数据库调用中实现吗?
(我可以只获取员工列表,然后在会话仍然打开时为每条记录填充公司属性,但这似乎效率很低)
【问题讨论】:
-
你从
sql.List<Employee>()的代码中得到一个错误? -
是的,因为结果集中的一些元素是公司对象。
-
但是 Employee.Company 属性设置为公司?
-
简短的回答是;以这种方式使用转换器和 createSQLQuery 时,您不能急于加载集合。现在我从未在 NH 上尝试过这个,但请看这里,docs.jboss.org/hibernate/orm/3.3/reference/en/html/… esp。在底部的几个查询中。
-
谢谢,我去看看
标签: c# nhibernate