有沒有什麼辦法可以獲得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,我希望有強類型的列。
爲什麼試圖從NHibernate構建數據集?似乎毫無意義,如果你真的需要使用數據集ADO.NET – sirrocco 2009-07-04 10:02:31
如果我選擇使用ADO.NET,那麼我必須跟蹤我寧願讓NHibernate處理的許多事情(方言,加入,標準,等等 - 我必須解析所有文本並自己重新組合 - 不是小任務)。 我的問題源於我的用戶可能會將自定義列添加到數據庫並查詢它們,我希望能夠從NHibernate獲取列類型。 – Michael 2009-07-06 15:22:57