ОБНОВЛЕНИЕ: я ответил на мой вопрос ниже, взгляните и дайте мне знать, если у вас есть лучший способ сделать это
резюме:
при вызове функции sqlserver из SQL Management Studio я получаю список с результатами {1, 2, 3}.
при вызове метода из кода, использующего NHibernate, я получаю этот список {1, 1, 1}. («1» - это целая строка результатов, а не скаляр «1»)
Я также попробовал это с различными наборами данных и получил то же самое поведение.
длинная история:
У меня есть функция sql на сервере sql, называемая GetHistory (itemId). он возвращает таблицу с результатами.
когда я запрашиваю из SQL Management Studio, я получаю список результатов. Я запрашиваю, вызывая функцию так:
select * from GetHistory(10001)
в моей заданной БД это приводит к 3 строкам. каждая строка имеет время, тип и описание.
в NHibernate я специально создал для этого новую сущность, поскольку такой органической таблицы / сущности нет.
поэтому у меня есть отображение:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="myNamespace" assembly="myAssembly">
<class name="HistoryEvent">
<id name="id" type="long" access="field">
<column name="Id"/>
<generator class="native"/>
</id>
<property name="type" column="Type" type="short" access="field"/>
<property name="time" column="Time" type="datetime" access="field"/>
<property name="description" column="Description" type="string" access="field"/>
</class>
<sql-query name='GetHistory'>
<return class='HistoryEvent, myAssembly' alias='historyEvent'/>
<![CDATA[SELECT * FROM GetHistory(:id)]]>
</sql-query>
</hibernate-mapping>
бизнес-объект выглядит так:
public class HistoryEvent
{
private long id;
private short type;
private string description;
private DateTime time;
... here be properties with public getter etc...
}
и, наконец, я вызываю эту функцию из своего кода следующим образом:
IList result = s.GetNamedQuery("GetHistory").SetInt64("id", id).List();
при проверке этого списка с помощью отладчика я получаю 3 объекта, которые являются одной строкой 3 раза.
Я также пытался использовать запрос напрямую из NHibernate (используя sql-запрос) вместо того, чтобы выполнять функцию DB, но получил те же результаты.
моя интуиция заключается в том, что что-то не так с моим отображением или что-то не так с NHibernate :)
HELP!