Результаты запроса nhibernate sql-query отличаются от прямых результатов запроса

ОБНОВЛЕНИЕ: я ответил на мой вопрос ниже, заглядываю и дайте мне знать, если у вас есть лучший способ сделать это


управляющее резюме:
при вызове моей функции 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-query) вместо того, чтобы проходить через функцию DB, но получил те же результаты.
моя интуиция заключается в том, что с моим сопоставлением что-то не так, или что-то не так с NHibernate 🙂
ПОМОГИТЕ!

хорошо, вскоре после того, как я разместил вопрос, я понял это.
писать все, что мне действительно помогло, я думаю. это была проблема:
Используемый столбец Идентификатор не был уникальным. это AN ID, а не RIGHT ID для запроса. почему это? потому что мой запрос возвращает объединение трех запросов из трех разных таблиц, а возвращаемый идентификатор – это ItemId (тот же, который был передан функции!)

поэтому теперь у меня был уникальный идентификатор. Я попытался кратко использовать тег составного id NHibernate вместо id, но с трудностями я решил не тратить больше времени на автоматы и возвращать идентификаторы из запроса.

узнав, что я не мог использовать SELECT IDENTITY () INTO … внутри функций с переменной таблицы, я считал RAND в течение секунды и в конечном итоге использовал ROW_NUMBER () OVER (SORT BY blah) для генерации моих поддельных идентификаторов. пока это работает довольно хорошо, хотя этот код не выиграет конкурс красоты.
PS: получили предложения для лучшего способа генерации идентификатора? или вы когда-нибудь получали составной идентификатор для работы? дай мне знать…