2014-09-23 68 views
3

是否有任何已知的解決方案讓NHibernate能夠使用返回多個結果集的存儲過程?具有多個結果集的NHibernate存儲過程

我正在開發一個項目,希望使用NHibernate,我們的dba只希望我們從存儲過程中讀取許多返回多個結果集。我看起來像NHibernate不直接支持這個用例,有沒有解決這個問題的擴展?

+0

http://stackoverflow.com/questions/3069865/nhibernate-multiple-recordsets-from-stored-procedure – granadaCoder 2014-09-23 19:33:42

回答

1

是的,這是可能的

添加虛擬查詢以獲得期望的結果。例如,如果我們希望從存儲過程的輸出中獲得第五個結果集,那麼在實際查詢後添加4個虛擬查詢(空查詢)後,使用AddScalar方法使用列名檢索數據。例如下面給出實際上是從5檢索列「export_file_line」的數據和第7的結果集

var session = GetCurrentSession(); 
var query = session.CreateSQLQuery("exec SPName @param1=:param1, @param2=:param2"); 
query.SetParameter("param1", value1); 
query.SetParameter("param2", value2); 

var multiResults = session.CreateMultiQuery() 
    .Add(query)// More table your procedure returns,more empty SQL query you should add 
    .Add(session.CreateSQLQuery(" ")) 
    .Add(session.CreateSQLQuery(" ")) 
    .Add(session.CreateSQLQuery(" ")) 
    .Add(session.CreateSQLQuery(" ") 
    .AddScalar("export_file_line", NHibernateUtil.String))// the fifth result set 
    .Add(session.CreateSQLQuery(" ")) 
    .Add(session.CreateSQLQuery(" ") 
    .AddScalar("export_file_line", NHibernateUtil.String))// the seventh result set 
    .Add(session.CreateSQLQuery(" ")) 
    .List(); 

if (multiResults == null || multiResults.Count <= 6 || multiResults[4] == null || multiResults[6] == null) return result; 
var headerList = (System.Collections.IList)multiResults[4]; 
var detailsList = (System.Collections.IList)multiResults[6]; 
+0

請解釋你的代碼對於那些後來偶然發現這個問題的人來說非常有用。直接粘貼代碼,可能很難理解。 – ishaan 2017-11-30 08:22:07

相關問題