2010-09-27 55 views
3

因此,我正在對由nHibernate控制的數據庫上的外部數據提供者提供郵政編碼查找。這涉及調用存儲過程並提供郵編。作爲回報,我得到了許多行,每行包含構成地址部分的多個列。使用nHibernate將未映射的數據轉換爲DTO

我們有一個地址DTO。但是我正在努力如何將數據庫結果轉換成這個對象,因爲它沒有映射到數據庫中的任何東西。我這樣做:

Dim spCall As String = String.Format("exec AddressFindListPostCode '{0}'", postcode) 
    Dim tran As Global.NHibernate.Transform.IResultTransformer = Global.NHibernate.Transform.Transformers.AliasToBean(GetType(Concrete.Cms.DataTransferObjects.Address)) 
    Dim streetList As IList(Of Concrete.Cms.DataTransferObjects.Address) = session.CreateSQLQuery(spCall).SetResultTransformer(tran).List(Of Concrete.Cms.DataTransferObjects.Address)() 

但當然它不能將結果集轉換成一個對象,沒有某種幫助的某種幫助。

問題實質上是,SP返回一個對象列表。每個對象(相當於一行)都包含與該行內的列對應的子對象。但是我看不到獲取子對象的方法。 streetList(i,j)將不起作用,並且streetList上沒有任何方法或屬性允許我訪問它們。

如何獲取我的數據來映射它?

乾杯, 馬特

回答

7

你可以嘗試批量加載數據到批量類,如:

Dim result As IList(Of BulkLoadAddressList) = session.CreateSQLQuery(spCall) 
    .SetResultTransformer(Transformers.AliasToBean(typeof(BulkLoadAddressList))) 
    .List(Of BulkLoadAddressList)() 

更多:NHibernate Ad-hoc mapping

+0

我剛剛試過了,雖然它編譯並運行。我的列表對象回來了。我創建的Dto比你的兩個屬性的例子更長,但沒有更復雜的(只是一串字符串)..任何想法發生了什麼? – 2010-09-27 12:36:39

+0

明白了 - 記錄集和Dto之間存在命名不匹配。謝謝 - 像往常一樣nHibernate竟然比我預期的更聰明:) – 2010-09-27 12:49:15

+0

很高興它的工作。 :) – rebelliard 2010-09-27 12:58:40