Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql NHibernate LINQ BIGINT铸件_Sql_Sql Server_Nhibernate_Casting_Max - Fatal编程技术网

Sql NHibernate LINQ BIGINT铸件

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

我试图了解此实体的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
,为什么需要强制转换?

我使用的是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,因为查询在其他方面也无法执行。感谢您花时间检查源代码。