NHibernate,如何读取 NamedQuery 结果元数据?

Posted

技术标签:

【中文标题】NHibernate,如何读取 NamedQuery 结果元数据?【英文标题】:NHibernate, how to read NamedQuery result metadata? 【发布时间】:2010-07-07 13:35:22 【问题描述】:

我在我的 nhibernate 映射文件上有一个 sql-query 定义,它调用一个存储过程来选择一些记录。

 <sql-query name="sp_MYSP">
     exec MYDBSP :param1, :param2, :param3
 </sql-query>

在代码上,我是这样调用命名查询的:

  IQuery myQuery= Session.GetNamedQuery("sp_MYSP");
  myQuery.SetString("param1", p1);
  myQuery.SetString("param2", p2);
  myQuery.SetString("param3", p3);

为了得到结果,我使用“列表”方法

   myQuery.List();

但是以这种方式,它返回一个没有任何元信息的对象列表......比如 columname。我会像数据表一样读取结果以获取特定属性的值...我该怎么做?

所选记录不代表我的域模式的任何实体,而只是用于特定流程的数据集合。

【问题讨论】:

【参考方案1】:

如果您不将该查询映射到实体并期望数据表,那么为什么要使用 NHibernate?

如果您实际上将 NHibernate 用于其余数据 (session.Connection) 并从那里创建原始 ADO.NET 命令,您仍然可以从 NHibernate 获得连接。

【讨论】:

【参考方案2】:

你是对的。

不过,我从 codeprojet 上发布的这篇文章中找到了另一个解决方案:http://www.codeproject.com/KB/tips/Execute_SQL_Nhibernate.aspx

适合我的场景。

【讨论】:

以上是关于NHibernate,如何读取 NamedQuery 结果元数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止NHibernate阅读儿童收藏?

Fluent NHibernate:如何将整个类映射为只读?

NHibernate 预选?

Castle ActiveRecord + NHibernate 中的交易傻瓜

在SQLite上使用NHibernate时获取“Dababase被锁定”(没有事务的多进程)

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