NHibernate CreateSQLQuery返回具有填充属性的对象列表(即急切加载)

时间:2013-05-08 08:52:03

标签: c# nhibernate

我在c#应用程序中使用Nhibernate。

我正在使用'CreateSQLQuery'从数据库加载一个对象列表。 问题是我还希望同时填充该对象的一个​​属性。

e.g。 给定对象: 公司 雇员

我有一个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属性。在一次数据库调用中这可能吗?

(我可以获取员工列表,然后在会话仍处于打开状态时为每条记录填充公司属性,但这似乎非常低效)

1 个答案:

答案 0 :(得分:0)

您可以在一次往返中单独查询两个表,并让会话将它们组合起来

session.Query<Company>().Where(...).ToFuture();
var results = session.Query<Employee>().Where(...).ToFuture();

return results.ToList();