是否有任何已知的解決方案讓NHibernate能夠使用返回多個結果集的存儲過程?具有多個結果集的NHibernate存儲過程
我正在開發一個項目,希望使用NHibernate,我們的dba只希望我們從存儲過程中讀取許多返回多個結果集。我看起來像NHibernate不直接支持這個用例,有沒有解決這個問題的擴展?
是否有任何已知的解決方案讓NHibernate能夠使用返回多個結果集的存儲過程?具有多個結果集的NHibernate存儲過程
我正在開發一個項目,希望使用NHibernate,我們的dba只希望我們從存儲過程中讀取許多返回多個結果集。我看起來像NHibernate不直接支持這個用例,有沒有解決這個問題的擴展?
簡短的回答是,NHiberate不支持這一點。
在這裏看到:
nhibernate multiple recordsets from stored procedure
實體框架〜還挺〜支持它。
http://msdn.microsoft.com/en-US/data/jj691402
但是,您的列名必須符合您的波科對象完全相同財產的名稱。
注意:當使用Translate方法創建實體時,EF不考慮任何映射。它將簡單地將結果集中的列名與類中的屬性名進行匹配。
是的,這是可能的
添加虛擬查詢以獲得期望的結果。例如,如果我們希望從存儲過程的輸出中獲得第五個結果集,那麼在實際查詢後添加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];
請解釋你的代碼對於那些後來偶然發現這個問題的人來說非常有用。直接粘貼代碼,可能很難理解。 – ishaan 2017-11-30 08:22:07
http://stackoverflow.com/questions/3069865/nhibernate-multiple-recordsets-from-stored-procedure – granadaCoder 2014-09-23 19:33:42