Как сопоставить сущность NHibernate с запросом
Я видел несколько примеров этого, и, насколько я могу судить, мой файл HBM следует той же схеме, но он не работает. Сначала файл:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
<class name="ThinAir" mutable="false" lazy="true" >
<id name="JobId">
<generator class="native" />
</id>
<property name="UserLogin"/>
<property name="UserEmail"/>
<property name="DateProcessed"/>
<loader query-ref="myquery"/>
</class>
<sql-query name="myquery">
<return class="ThinAir">
<return-property name="JobID" column="JobId"/>
<return-property name="userLogin" column="UserLogin"/>
<return-property name="DateProcessed" column="DateProcessed"/>
<return-property name="userEmail" column="UserEmail"/>
</return>
<![CDATA[
SELECT DISTINCT JobID,
userLogin,
DateProcessed,
useremail
FROM dbo.someothertable
]]>
</sql-query>
</hibernate-mapping>
"MyQuery" сам по себе, работает. То есть если я позвоню
var x = session.GetNamedQuery("myquery").List();
Я получаю правильный списокТонкий воздух объекты.
Но когда я пытаюсь получить списокThinAirs нравится:
var submissions = session.CreateCriteria<ThinAir>().List<ThinAir>();
я получил
Метод теста testThinAir вызвал исключение: NHibernate.Exceptions.GenericADOException: не удалось выполнить запрос [ВЫБРАТЬ this_.JobId как JobId16_0_, this_.UserLogin как UserLogin16_0_, this_.UserEmail как UserEmail16_0_, this_.DateProcessed_ DatePro_4OM_16Тонкий воздух это_ ]
Моя интерпретация этого явления такова, что NH игнорирует мою<loader>
тэг и таким образом пытается загрузить данные из базовой таблицы, которая по умолчанию предполагает имяТонкий воздух потому что это имя класса сущности, только тамне ЛюбыеТонкий воздух таблица, отсюда и сообщение об ошибке.
Правильно ли это истолковано? И в любом случае, что я делаю неправильно и как я могу сделать это правильно?
Заранее спасибо.
Майкл