2014-07-02 79 views
1

我試圖完成與SO Question中描述的相同的操作。但是,回覆中提到的解決方案無法解決我的問題。NHibernate列表 - 無法投射System.Collections.Hashtable類型的對象

暴露於我的API使用例如下面,縮短用於離purpsoes

IList results = CurrentSession.CreateSQLQuery("exec myStoredProc ...") 
    .SetParameters("..", ...) 
    .SetResultTransformer(new NHibernate.Transform.AliasToEntityMapResultTransformer()) 
    .List(); 

但是我需要這是類型T的特定對象,它是一個自定義對象。我試着改變這個使用NHibernate 列表T()但沒有運氣。

如果我試圖施放此我通常看到,指出無法型「System.Collections.Hashtable」的情況下,對象鍵入錯誤消息「...」

有沒有人遇到過similiar問題並知道如何將其轉換爲與System.Collections.Hashtable不同的類型。我的主要目標是我需要使用LINQ語句來查詢結果,並且無法使用他編碼的IList返回。

我正在嘗試使用API​​,因爲這已經在使用應用程序的其他地方使用過了。因此,如果有一種方法可以與IList合作並進行演繹/轉換,那最好。我知道這可能是由於使用NHibernate.Transform.AliasToEntityMapResultTransformer而發生的。

感謝您的任何見解。我谷歌搜索了這一點,並沒有找到答案。

回答

2

這裏的解決方案不應該那麼複雜。在情況下,你的實體是這樣的:

public class MyEntity 
{ 
    public virtual int Property1 { get; set; } 
    public virtual string Property2 { get; set; } 
    ... 

,並且存儲過程的結果是這樣的:

SELECT col1 as Property1 // the same alias as property name is crucial 
    , col2 as Property2 
    ... 

我們可以從中獲利內置AliasToBean<TEntity>()變壓器:

IList<MyEntity> results = CurrentSession.CreateSQLQuery("exec myStoredProc ...") 
    .SetParameters("..", ...) 
    .SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<MyEntity>()) 
    .List<MyEntity>(); 
+0

我很久沒有聽說過AliasToBean了,謝謝。 Jimmy Board還在一篇關於[NHibernate特別映射]的文章中提到它(http://lostechies.com/jimmybogard/2010/06/30/ad-hoc-mapping-with-nhibernate/)。感謝您的迴應。 – Scott

+0

很好,如果有幫助:)享受NHibernate ... –

相關問題