NH用了很长时间一直都是用2.X版本,今天体验了一下3.3。记录一下两者使用上的一些区别。

一、代理

//2.x 写法
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>//3.X写法
<property name='proxyfactory.factory_class'>NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate</property>

因为3.X已经内部集成proxy generator,因此无需另外的NHibernate.ByteCode.LinFu.dll or NHibernate.ByteCode.Castle.dll了。

二、延迟加载

public class Childpublic class Parent
{Public virtual Child Child{get;set;}
}    

Parent p=XXXXXXX;
If (p.Child is Child)
{
//do something
}

由于有代理的延迟加载,p.Child并不是Child类型。此处的is判断是false。

NH3.X的Parent Map文件中<many-to-one name="Child" lazy="no-proxy"/>将会有两个效果

  1. Child属性依然是延迟加载(NH2.X若声明是no proxy会立即加载)
  2. 首次访问Child属性时,NH会从数据库加载数据,并且返回实际类型。

三、Hql写法的变更

2.X删除数据的写法

ISession session= GetSession();
string hql = "from table1 tab where DataTime between :a and :b";
IType[] itypes = new IType[] { NHibernateUtil.DateTime, NHibernateUtil.DateTime };
session().Delete(hql, new object[] { startDate, endDate }, itypes);

以上的写法在3.X中会产生异常: KeyNotFoundException: 给定关键字不在字典中。

3.X写法1:放弃参数命名,全部用?代替,阅读性不是太好。

ISession session= GetSession();
string hql = "from table1 tab where DataTime between ? and ?";
IType[] itypes = new IType[] { NHibernateUtil.DateTime, NHibernateUtil.DateTime };
session().Delete(hql, new object[] { startDate, endDate }, itypes);

3.X写法2:该方法与上一种差不多,但在hql中声明了是delete操作。

string hql = "delete from table1 tab where DataTime between ? and ?";
IType[] itypes = new IType[] { NHibernateUtil.DateTime, NHibernateUtil.DateTime };
IQuery q = session.CreateQuery(hql);
for (int i = 0; i < vals.Length; i++)
{q.SetParameter(i, vals[i], itypes[i]);
}
q.ExecuteUpdate();

3.X写法3:每个hql参数用SetXXType显式赋值。

string hql = "delete from table1 tab where DataTime between :start and :end";
IType[] itypes = new IType[] { NHibernateUtil.DateTime, NHibernateUtil.DateTime };
IQuery q = session.CreateQuery(hql);
q.SetDateTime(“start”,a);
q.SetDateTime(“end”, b);
q.ExecuteUpdate();

虽然SetParameter重载了多个方法,但position只能用于“?”声明的hql,name只能用于命名参数的hql。否则会产生异常。

IQuery SetParameter(int position, object val, IType type);IQuery SetParameter(string name, object val, IType type);

转载于:https://www.cnblogs.com/Byeah/archive/2013/03/25/2981093.html

NH3.X与2.X使用上的一些区别相关推荐

  1. 实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别?...

    实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别? 实例规格  共享计算型    和  通用型(原独享),  如果同样是2核4G   或者4核8G ;  性能上有什么差异/差距大 ...

  2. list.sort(reverse=true) 和 list.reverse() 排序上有什么区别吗?

    list.sort(reverse=true) 和 list.reverse() 排序上有什么区别吗? 请问诸位大侠:python中的列表, list.sort(reverse=true) 和 lis ...

  3. [vue] vue和微信小程序写法上有什么区别?

    [vue] vue和微信小程序写法上有什么区别?写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别. 一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下 ...

  4. rs232串口驱动_RS232与RS485在性能上有啥区别和联系?老电工总结分析,一目了然...

    串口是一种非常通用的设备接口,是仪器仪表设备常用的通信接口,常用于远程采集设备数据或者实现远程控制.串口的开发也比较简单,它是很多工程师最喜欢的接口之一. 常见的串口协议有RS-232.RS-422. ...

  5. C语言和C++语言在语法上面的部分区别

    (2011-03-16 17:12:13) 标签: 杂谈 分类:计算机 C语言和C++语言在语法上面的部分区别: 1.C语言的定义必须在最前面,C++可以在任何地方定义,比如 for(int i=0; ...

  6. 右手螺旋判断磁感应强度方向_弹簧左旋or右旋在功能和应用上有什么区别,如何判断左旋还是右旋...

    点击上方"机械设计一点通"关注我们,每天学习一个机械设计相关知识点 弹簧左旋/右旋在功能上有什么区别 弹簧左旋.右旋就和左左旋.右旋螺纹一样,如果是压缩或拉伸弹簧,左旋.右旋都一样 ...

  7. gpio上拉下拉区别

    gpio上拉下拉区别 GPIO是一颗芯片(MCU)必须具备的最基本外设功能. GPIO通常有三种状态:高电平.低电平和高阻态.高阻态换句话说就是断开状态或浮空态.因此上拉和下拉其中一个强大的理由就是为 ...

  8. Unity里面CG和HLSL在写法上的一些区别

    回到目录 大家好,我是阿赵.这里继续讲URP相关的内容. 这次想讲的是CG和HLSL在写法上的一些区别. 一.为什么开始用HLSL 首先,基本上大家都知道的事情再说一遍. 三种Shader编程语言: ...

  9. 【电气专业知识问答】问:电压互感器和电流互感器在作用和原理上有什么区别?

    [电气专业知识问答] 问:电压互感器和电流互感器在作用和原理上有什么区别? 答:两者的主要区别是正常运行时工作状态不相同,表现为: (1)电流互感器二次可以短路,但不得开路,电压互感器二次可以开路,但 ...

最新文章

  1. 关于VMFS6 Block 1M 512M 说明
  2. 起名算法 php,PHP实现各种经典算法详解
  3. Java中没有递归的二进制搜索–迭代算法
  4. python的哲学内容_python 哲学或者说文化
  5. 计算机安装时的用户权限,如何设置win10系统使得电脑在安装软件前需要管理员的权限...
  6. 一、auto_test_base
  7. git提交注释内容分行处理
  8. python 生成可执行文件.exe
  9. 为什么要使用Iocomp控件?
  10. CCS安装多版本编译器 Compiler version__更新手动下载、安装方法
  11. iframe透明解决方案
  12. 能编辑pdf文件的软件
  13. 高中数学联赛二试怎么准备
  14. android 双击点亮屏幕,手机双击点亮屏幕是怎么实现的
  15. 简述TCP三次握手,看不懂算我输!
  16. You have not concluded your cherry-pick
  17. 计算机服务器属无形资产吗,服务器属于固定资产还是无形资产
  18. 【多模态】Multi-modal chemical information reconstruction from images and texts for exploring the
  19. 【期末复习笔记】知识产权法——著作权、专利法、商标权
  20. 黑马程序员pink老师前端h5(html5)+css3(16)P94-P104伪类选择器上并集选择器子选择器后代选择器emmet语法生成标签快速格式化代码复合选择器简介

热门文章

  1. PHP内核——内存管理
  2. 你以为有白金卡就很牛逼?错!
  3. 意大利终于付出了代价
  4. 一只紧握笔的手:地震中的感人图片之二
  5. Win7中的文件关联注册表
  6. leftjoin多个on条件_MYSQL|为什么LEFT JOIN会这么慢?
  7. python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法
  8. openssl 添加自定义算法_GitHub:用PyTorch实现17种深度强化学习算法
  9. audio h5 src 变了之后_我在叩丁狼学H5
  10. webcomponents安装了没有用_Web Components 入门实例教程