我试图理解这个实体的NHibernate SQL输出:
public class Person
{
public virtual long Id { get; set; }
public virtual long Number { get; set; }
}
当我写:
var maxNumber = s.Query<Person>().Max(p => p.Number);
生成的SQL如下所示:
select cast(max(person0_.Number) as BIGINT) as col_0_0_ from Person person0_
如果Number
列bigint
为<class name="NhMappingTest.Person, NhMappingTest">
<id name="Id"><generator class="increment" /></id>
<property name="Number" />
</class>
,为什么需要投射?
我正在使用NHibernate 3.2,SQL Server 2008 R2,映射定义如下:
{{1}}
答案 0 :(得分:1)
不是需要。这是一个实现细节:
protected HqlTreeNode VisitNhMax(NhMaxExpression expression)
{
return _hqlTreeBuilder.Cast(
_hqlTreeBuilder.Max(
VisitExpression(expression.Expression).AsExpression()),
expression.Type);
}
所以,代码正在盲目地投射结果。