Литье NHibernate LINQ BIGINT - PullRequest
       3

Литье NHibernate LINQ BIGINT

3 голосов
/ 15 марта 2012

Я пытаюсь понять вывод 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? 1013 *

Я использую NHibernate 3.2, SQL Server 2008 R2, сопоставление определено следующим образом:

<class name="NhMappingTest.Person, NhMappingTest">
      <id name="Id"><generator class="increment" /></id>
      <property name="Number" />
</class>

1 Ответ

1 голос
/ 16 марта 2012

Это не необходимо . Это деталь реализации:

protected HqlTreeNode VisitNhMax(NhMaxExpression expression)
{
    return _hqlTreeBuilder.Cast(
        _hqlTreeBuilder.Max(
            VisitExpression(expression.Expression).AsExpression()), 
            expression.Type);
}

Итак, код слепо приводит результат.

...