N具有多个结果集的抽象存储过程

本文关键字:抽象 存储过程 结果 | 更新日期: 2023-09-27 18:24:14

有什么已知的解决方案可以让NHibernate处理返回多个结果集的存储过程吗?

我正在做一个项目,负责人希望使用NHibernate,而我们的dba只希望我们从存储过程中读取,其中许多存储过程返回多个结果集。在我看来,NHibernate不直接支持这个用例,有什么解决方案/扩展吗?

N具有多个结果集的抽象存储过程

是的,可能是

添加伪查询以获得所需结果。例如,如果我们想从存储过程的输出中获得第五个结果集,那么在实际查询之后再添加4个伪查询(空查询),然后使用AddScalar方法使用列名检索数据。下面给出的示例实际上是从第5个和第7个结果集中检索"export_file_line"列的数据

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];

简单的答案是NHiberate不支持这一点。

请参阅此处:

nhibernate来自存储过程的多个记录集

实体框架~有点~支持它。

http://msdn.microsoft.com/en-US/data/jj691402

msdn项目名称为";具有多个结果集的存储过程";(万一将来链路失效)

";有点";是EntityFramework部分的这一部分吗;列名必须与Poco对象属性名完全匹配。

以下是msdn文章中的一句话。

注意:EF在使用Translate方法创建实体时不考虑任何映射。它将简单地将结果集中的列名与类上的属性名相匹配