NHibernate - Как для сопоставления с классом, у которого нет таблицы (для пользовательских запросов sql)

Обновление - Конфигурация отредактирована для удобства чтения in 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>

12
задан gb2d 4 May 2011 в 13:03
поделиться