Обновление - измененная конфигурация для удобства чтения в SO
Привет,
Я изучаю NHibernate на день или два, но застрял в одной точке.
Мне нужно иметь возможность выполнять собственные хранимые процедуры и использовать NHibernate для их сопоставления с классами домена.
У меня это работает для сценария, в котором пользовательский запрос возвращается к объекту, который сопоставляется с таблицей базы данных, как показано многими примерами nhibernate (см. первый раздел ниже).
Однако в конфигурации для второго раздела ниже запрос вытягивает только 2 столбца из целевой таблицы. По этой причине я создал пользовательский объект, чтобы в NHibernate было что-то, чтобы сопоставить возвращаемые значения. Пользовательские свойства объекта имеют то же имя, что и столбцы возврата из пользовательской процедуры.
Когда я запускаю свои тесты, я получаю исключение вроде:
NHibernate.MappingException: Нет настаивать на: Proj.DataEntityTracker.Domain.Entities.CustomObject
Итак, я думаю, что отображение в разделе sql-query недостаточно для NHibernate для сопоставления возвращаемых значений с объектами.
Итак, мой вопрос: как настроить сопоставление, для которого нет никакой эквивалентной таблицы в базе данных, чтобы я мог сопоставить результаты хранимой процедуры с этим объектом?
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Proj.DataEntityTracker.Domain" namespace="Proj.DataEntityTracker.Domain.Entities"> <class name="TrackedEntityProperty" table="TrackedEntityProperties"> <id name="ID" type="Int32" unsaved-value="0"> <generator class="native"></generator> </id> <property name="TrackedEntityID" /> <property name="Name" /> <property name="CreatedDate" /> <property name="ChangedDate" /> <property name="DataType" /> <property name="CurrentValue" /> <property name="RequestPropertyValueQuestion" /> <property name="NullResponseIsAcceptable" /> <property name="Duplication" /> <property name="Frequency" /> <property name="IsActive" /> <property name="IsDeleted" /> <property name="LastUpdateTaskGenerated" /> <property name="LastUpdateTaskCompleted" /> <property name="LastUpdateTaskCancelled" /> </class> <sql-query name="usp_GetTrackedEntityPropertiesDueForUpdate" > <return alias="usp_GetTrackedEntityPropertiesDueForUpdate" class="TrackedEntityProperty"> <return-property name="ID" column="ID" /> <return-property name="TrackedEntityID" column="TrackedEntityID" /> <return-property name="Name" column="Name" /> <return-property name="CreatedDate" column="CreatedDate" /> <return-property name="ChangedDate" column="ChangedDate" /> <return-property name="DataType" column="DataType" /> <return-property name="CurrentValue" column="CurrentValue" /> <return-property name="RequestPropertyValueQuestion" column="RequestPropertyValueQuestion" /> <return-property name="NullResponseIsAcceptable" column="NullResponseIsAcceptable" /> <return-property name="Duplication" column="Duplication" /> <return-property name="Frequency" column="Frequency" /> <return-property name="IsActive" column="IsActive" /> <return-property name="IsDeleted" column="IsDeleted" /> <return-property name="LastUpdateTaskGenerated" column="LastUpdateTaskGenerated" /> <return-property name="LastUpdateTaskCompleted" column="LastUpdateTaskCompleted" /> <return-property name="LastUpdateTaskCancelled" column="LastUpdateTaskCancelled" /> </return> exec usp_GetTrackedEntityPropertiesDueForUpdate :TrackedEntityID </sql-query> <sql-query name="usp_SomeCustomSproc"> <return alias="usp_SomeCustomSproc" class="CustomObject"> <return-property name="ID" column="ID" /> <return-property name="Name" column="Name" /> </return> exec usp_SomeCustomSproc :TrackedEntityID </sql-query> </hibernate-mapping>