更新的一類 - 在SONHibernate的 - 如何映射到沒有表(自定義的SQL查詢)
嗨,
我一直在學習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>
謝謝,這是非常方便 – gb2d 2011-05-10 15:33:12