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

本文关键字:列表 加载 对象 返回 CreateSQLQuery 属性 填充 NHibernate | 更新日期: 2023-09-27 18:12:30

我正在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对象)。我只希望返回Employee对象,但我希望填充Employee的Company属性。这能在一个电话里实现吗?

(我可以只获取员工列表,然后在会话仍然打开时为每个记录填充Company属性,但这似乎非常低效)

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

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

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