网站大量收购独家精品文档,联系QQ:2885784924

NHibernate多表查询解决方法.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NHibernate多表查询解决方法

NHibernate多表查询概述:在项目中应用NHibernate架构时,会经常遇到多表查询.因为项目上要用到,通过多天的查询总结了以下两种解决方案.解决方案:(1)使用HQL语句,然后把查询出的结果存入临时表中,然后再进行绑定.(2)使用select new OaxtJoinGlxt这种语法,根据查询的内容自己构建相应的实体类.第一种方案实现具体过程:我的需求如下:我需要查询JkptOaxtOrganization实体类中的Orgid,及JkptGlxtOrganization实体类中的Orgname我需要查询JkptOaxtOrganization实体类中的Orgid,及JkptGlxtOrganization实体类中的Orgname第一步:构建HQL语句如下string sql = select oo.Orgid ,go.Orgname from JkptOaxtOrganization as oo,JkptGlxtOrganization as go where oo.Orgid=+orgid+ and oo.Suborgid=go.Orgid; IQuery Query = session.CreateQuery(sql);IList list = Query.List();说明:如果在相应的映射文件中设置好实体的对应关系,就没有必要加Where条件了.第二步:建立临时表,把查询出的结果存入临时表DataTable dt = new DataTable();DataColumn dc = new DataColumn(); dc = new DataColumn(); //增加第1列dc.DataType = System.Type.GetType(System.Int32);dc.ColumnName = Orgid;dt.Columns.Add(dc);dc = new DataColumn(); //增加第2列dc.DataType = System.Type.GetType(System.String);dc.ColumnName = Orgname;dt.Columns.Add(dc);dc.Dispose();IEnumerator enu = list.GetEnumerator();while (enu.MoveNext()){ //给查询出来的每行赋值object[] obj = (object[])enu.Current;DataRow newrow = dt.NewRow();newrow[Orgid] = obj[0];newrow[Orgname] = obj[1];dt.Rows.Add(newrow);}ds.Tables.Add(dt);我个人觉得,这种方式存在很大缺陷,如临时表用完需要删除,如果要查询50个字段,那么写临时表就得累死,所以我还是推荐大家用第二种方案.第二种方案的具体实现过程第一步:构建HQL查询语句:string sql = select new OaxtJoinGlxt(oo.Orgid,gg.Orgname) from JkptOaxtOrganization as oo , JkptGlxtOrganization as gg where oo.Orgid= + orgid + and oo.Suborgid=gg.Orgid; IQuery query = session.CreateQuery(sql);IList list = query.List();ds = Helpers.ConvertToDataSet(list);return ds;第二步:根据查询的内容构造的实体类OaxtJoinGlxt.cs如下 public class OaxtJoinGlxt{public OaxtJoinGlxt(decimal pOrgid, string pOrgname){this._Orgid = pOrgid;this._Orgname = pOrgname;}private decimal? _Orgid;public decimal? Orgid{get { return _Orgid; }set { _Orgid =value;}}private string _Orgname;public string Orgname{get { return _Orgname; }set { _Orgname = value; }}}第三步:在相应的映射文件中导入OaxtJoinGlxt类为了要让NHibernate知道到什么地方去找这个OaxtJoinGlxt类,我们需要将OaxtJoinGlxt类也导入到hbm.xml 文件定义中,在JkptOaxtWeat

您可能关注的文档

文档评论(0)

2017meng + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档