Sql NHibernate LINQ BIGINT铸件
我试图了解此实体的NHibernate SQL输出:Sql NHibernate LINQ BIGINT铸件,sql,sql-server,nhibernate,casting,max,Sql,Sql Server,Nhibernate,Casting,Max,我试图了解此实体的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); 如果Number列仍然是bigint,为什么需要强制转换? 我使用的是NHiber
public class Person
{
public virtual long Id { get; set; }
public virtual long Number { get; set; }
}
当我写作时:
var maxNumber = s.Query<Person>().Max(p => p.Number);
如果Number
列仍然是bigint
,为什么需要强制转换?
我使用的是NHibernate 3.2、SQL Server 2008 R2,映射定义如下:
select cast(max(person0_.Number) as BIGINT) as col_0_0_ from Person person0_
<class name="NhMappingTest.Person, NhMappingTest">
<id name="Id"><generator class="increment" /></id>
<property name="Number" />
</class>
不需要它。这是一个实施细节:
protected HqlTreeNode VisitNhMax(NhMaxExpression expression)
{
return _hqlTreeBuilder.Cast(
_hqlTreeBuilder.Max(
VisitExpression(expression.Expression).AsExpression()),
expression.Type);
}
因此,代码盲目地投射结果。如果从映射中删除
type=“System.Int64,mscorlib”
,结果是否相同?@Rippo:是的,我后来添加了它,以查看它是否会改变任何东西。在添加这个之前,我还使用NHibernate创建了DB模式,列被创建为bigint
。而且,notnull
似乎不会影响这一点。我将把它简化为我的第一个复制版本。好的,因为它很可能不会影响服务器端的性能,我对此很满意。我只是想检查这是否是一个潜在的bug,因为查询在其他方面也无法执行。感谢您花时间检查源代码。