NHibernate命名查询不返回所有字段
本文关键字:字段 返回 查询 NHibernate | 更新日期: 2023-09-27 18:06:26
我在Forecast.hbm.xml中定义了以下命名查询:
SELECT
c.ForecastedYear,
s.Description,
Sum(c.NumTrees) AS NumTrees
FROM
EcoForecasts AS f INNER JOIN
(EcoForecastCohorts AS c INNER JOIN EcoStrata AS s ON s.StrataKey = c.StratumKey)
ON f.ForecastKey = c.ForecastKey
WHERE
f.ForecastKey = :guid
GROUP BY
c.ForecastedYear,
c.StratumKey,
s.Description
ORDER BY
s.Description,
c.ForecastedYear;
我在c#文件NumTreesByStrataReport.cs中像这样调用查询:
IList<Result> results = _input.GetNamedQuery("NumTreesByStrata")
.SetGuid("guid", _iSess.ForecastKey.Value)
.List<object[]>()
.Select(result => new Result {
Year = Convert.ToInt16(result[0]),
Strata = Convert.ToString(result[1]),
NumTrees = Convert.ToInt64(result[2])
})
.ToList();
return results;
然而,这段代码抛出了一个IndexOutOfRangeException
,因为.List<object[]>()
部分返回的是一个只有3个元素的对象数组列表。未返回s.Description
字段。
如果我在数据库引擎(Microsoft Access)中运行SQL查询,则返回所有3列。为什么NHibernate不能做数据库可以做的并返回所有选定的字段?
我建议使用result to bean转换器,这样代码会更简洁。
return _session.GetNamedQuery("NumTreesByStrata")
.SetGuid("guid", forecastKeyValue)
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
谢谢大家的帮助。事实证明,问题实际上是与我的映射文件:
<sql-query name="NumTreesByStrata">
<return-scalar column="ForecastedYear" type="Int16"/>
<return-scalar column="NumTrees" type="Int64"/>
<![CDATA[
SELECT c.ForecastedYear,
...
]]>
</sql-query>
我添加了缺失的<return-scalar column="Description" type="string"/>
元素使其工作。
谢谢你的建议,Alexey,我不知道你可以这样做!我建议使用result to bean转换器,这样代码会更简洁。