2011-06-16 47 views
3

我有NHibernate的映射工作方式類似於這樣:NHibernate的使用存儲過程或映射

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="BizEntities" 
    namespace="BizEntities" 
    default-lazy="false"> 
    <class name="SubscriberQueueItem" table="SubscriberQueueItem"> 
    <id name="SubscriberQueueItemId" column="Id" type="int" unsaved-value="0"> 
     <generator class="identity" /> 
    </id> 
    <property name="DateCreated" column="DateCreated" type="DateTime" /> 
    <property name="CMIId" column="CMIId" type="int" /> 
    <property name="DateProcessed" column="DateProcessed" type="DateTime" /> 
    <property name="EventStatus" column="EventStatusId" type="QueueStatusTypeValues, BizEntities" /> 
    <many-to-one name="Subscription" class="Subscription" column="SubscriptionId" /> 
    <property name="ErrorDescription" column="ErrorDescription" type="string" /> 

    </class> 
</hibernate-mapping> 

,它與對錶簡單的查詢檢索。

是否可以將此類映射到存儲過程?我寫了一個程序,它回溯了難以寫入NHibernate查詢的特定數據子部分,但易於編寫爲存儲過程。

我可以簡單地添加一個存儲過程映射作爲回答here,並檢索基於我的NHibernate查詢類型的直接映射或存儲過程的對象,或添加一個存儲過程映射到我的HBM意味着我只能檢索基於該存儲過程?

回答

6

存儲過程中NHibernate的工作只是罰款,我使用的是他們沒有問題:)

你需要添加一個「命名查詢」到你的Hibernate映射,像這樣:

<sql-query name="spMyProcedure"> 
    <!-- return type must be an NHibernate mapped entity --> 
    <return alias="SubscriberQueueItem" type="BizEntities.SubscriberQueueItem, BizEntities" /> 

    exec spMyProcedure @Param1=:Param1, @Param2=:Param2 
</sql-query> 

如果你的存儲過程的返回類型不匹配已經被映射的實體,您需要創建一個新的。

要調用的SP,你需要添加以下代碼:

var query = session.GetNamedQuery("spMyProcedure"); 

query.SetParameter("Param1", "hello"); 
query.SetParameter("Param2", "byebye"); 

SubscriberQueueItem result = query.UniqueResult<SubscriberQueueItem>(); 
+0

因此,爲這樣的選擇添加一個命名查詢並不妨礙你做正常的NHibernate映射(不使用存儲過程)?優秀! – Jeff 2011-06-16 15:21:29

+0

不,你仍然可以在適當的地方直接訪問表格:) – MattDavey 2011-06-16 15:49:03

+0

NHibernate映射XSD沒有爲元素定義'type'屬性。 http://hibernatingrhinos.googlecode.com/svn/trunk/Caching/SharedLibs/nhibernate-mapping.xsd – 2014-12-02 18:50:14

0

我不確定你想達到什麼,但我認爲這兩件事是相互排斥的。

你可能會對ayende帖子一看:http://ayende.com/blog/1728/should-you-use-nhibernate-with-stored-procedure

+0

我認爲這是說什麼,我想達到的目的:我希望能夠進行正常的查詢對「SubscriberQueueItem」表,我也希望能夠通過存儲過程檢索SubscriberQueueItem對象。 – Jeff 2011-06-16 15:18:12

相關問題