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

Dec*_*ook 6 c# nhibernate fluent-nhibernate

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

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

Jos*_*ian 5

对的,这是可能的

添加虚拟查询以获得所需的结果。例如,如果我们想要从存储过程的输出中获得第五个结果集,在实际查询之后再添加 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];
Run Code Online (Sandbox Code Playgroud)

  • 请解释您的代码,使其对稍后偶然发现此答案的人有用。直接粘贴代码,可能很难理解。 (2认同)

gra*_*der 3

简而言之,NHiberate 不支持这一点。

看这里:

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

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

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

msdn文章名称是“具有多个结果集的存储过程”(以防将来链接失效)

“有点”是 EntityFramework 部分的这一部分 -> 你的列名必须与你的 Poco 对象属性名完全匹配。

以下是 msdn 文章中的引用。

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