具有多个结果集的NHibernate存储过程[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有多个结果集的NHibernate存储过程[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

是否有任何已知的解决方案让NHibernate使用返回多个结果集的存储过程?

我正在开发一个项目,主管希望使用NHibernate,我们的dba只希望我们从存储过程中读取许多返回多个结果集的存储过程。我看起来像NHibernate不直接支持这个用例,是否有任何解决方案/扩展?

答案

对的,这是可能的

添加虚拟查询以获得所需结果。例如,如果我们想要从存储过程的输出中得到第五个结果集,则在实际查询之后再添加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 multiple recordsets from stored procedure

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

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

但是,您的列名必须与您的Poco对象属性名称完全匹配。

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

以上是关于具有多个结果集的NHibernate存储过程[重复]的主要内容,如果未能解决你的问题,请参考以下文章

数据访问设计:多个结果集单个存储过程或每个存储过程单个结果集

Entity Framework 6 中具有多个记录集的存储过程

从返回多个结果集的存储过程中插入临时表

来自存储过程的多个结果集的 s-s-rS 最佳实践

如何将单个结果集从返回多个集的 SQL 存储过程保存到临时表?

NHibernate 处理来自 sp 调用的多个结果集