C# 具有多个结果集的NHibernate存储过程

C# 具有多个结果集的NHibernate存储过程,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,让NHibernate处理返回多个结果集的存储过程是否有任何已知的解决方案 我正在从事一个项目,负责人希望使用NHibernate,我们的dba只希望我们读取存储过程,其中许多存储过程返回多个结果集。在我看来,NHibernate不直接支持这个用例,是否有任何解决方案/扩展?简单的回答是NHibernate不支持这个 请看这里: 实体框架~kinda~支持它 但是,列名必须与Poco对象的属性名完全匹配 注意:EF在使用Translate方法创建实体时不考虑任何映射。它只是将结果集中的列名与

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


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

简单的回答是NHibernate不支持这个

请看这里:

实体框架~kinda~支持它

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

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

是的,这是可能的

添加虚拟查询以获得所需结果。例如,如果希望从存储过程的输出中获得第五个结果集,则在实际查询之后再添加4个虚拟查询(空查询),然后使用AddScalar方法使用列名检索数据。下面给出的示例实际上是从第5和第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];
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)//过程返回的表越多,应该添加的空SQL查询越多
.Add(session.CreateSQLQuery(“”)
.Add(session.CreateSQLQuery(“”)
.Add(session.CreateSQLQuery(“”)
.Add(session.CreateSQLQuery(“”)
.AddScalar(“导出文件行”,NHibernateUtil.String))//第五个结果集
.Add(session.CreateSQLQuery(“”)
.Add(session.CreateSQLQuery(“”)
.AddScalar(“导出文件行”,NHibernateUtil.String))//第七个结果集
.Add(session.CreateSQLQuery(“”)
.List();

如果(multiResults==null | | | multiResults.Count),请解释您的代码,使其对后来偶然发现此答案的人有用。直接粘贴代码可能很难理解。注意:CreateMultiQuery现已过时,您应该改用CreateQueryBatch