2

我在 ac# 应用程序中使用 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 属性。这可能在一个数据库调用中吗?

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

4

1 回答 1

0

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

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

return results.ToList();
于 2013-05-10T06:41:56.837 回答