2009-07-02 100 views
0

有沒有什麼辦法可以獲得NHibernate作爲運行查詢結果放入ICriteria對象的對象類型?在這個代碼示例中,如果它們不爲null,則可以獲取我的對象的類型,但如果它們是?另外,根據返回的數據,一個「行」(object [])可能在其他行不存在的地方有空字段 - 迫使我枚舉所有行(最壞情況)以確定每列(對象的索引[]) 應該。NHibernate ICriteria和預期類型

在哪裏可以找到對象的預期類型(我創建的數組中的每個對象的預期類型 - 顯然它不會在我的數組上,但我希望它在某處ICriteria層次結構)?

DetachedCriteria dc = DetachedCriteria.For<MyObject>().Add(...).SetProjection(...); 

IList<object[]> list = dc.GetExecutableCriteria(session).List().OfType<object[]>().ToList(); 

foreach(object [] o in list) 
{ 
    foreach(object p in o) 
    { 
     if(p != null) 
     Type t = p.GetType(); 
     else 
     throw new ApplicationException("Query returned null for column"); 
    } 
} 

我問這是因爲不得不實際檢查由NHibernate返回的結果似乎是錯誤的方式去做這件事。反射似乎也沒有任何幫助,因爲在檢查返回的ICriteria對象(CriteriaImpl對象)時,我無法在任何地方找到對象類型的實例,而是在實際結果「row」/「column」中找到對象。

我問,因爲我試圖從一個NHibernate的結果動態創建一個DataTable,我希望有強類型的列。

+0

爲什麼試圖從NHibernate構建數據集?似乎毫無意義,如果你真的需要使用數據集ADO.NET – sirrocco 2009-07-04 10:02:31

+0

如果我選擇使用ADO.NET,那麼我必須跟蹤我寧願讓NHibernate處理的許多事情(方言,加入,標準,等等 - 我必須解析所有文本並自己重新組合 - 不是小任務)。 我的問題源於我的用戶可能會將自定義列添加到數據庫並查詢它們,我希望能夠從NHibernate獲取列類型。 – Michael 2009-07-06 15:22:57

回答

0

返回的類型是您查詢的類型。如果您的用戶正在添加自定義列並自由查詢,則不會知道您要查詢的內容,因此,如果不檢查實際對象,就無法獲得強類型結果。

AFAIK這是NHibernate的限制。