Using stateless sessions

使用无状态会话

  当进行大量数据处理的时候,可能会放弃使用一些高级特性,而使用更接近底层的API来提高性能.在NHibernate中,这种高性能的底层API就是无状态的会话.本节介绍如何使用无状态会话来更新movie对象的价格.

准备

使用第一章的Eg.Core和第二章的Configuring NHibernate with App.config来创建一个控制台应用程序.

步骤

1.   先创建一些数据,在Main方法中添加下面的代码:

View Code

using (var session = sessionFactory.OpenStatelessSession())
{using (var tx = session.BeginTransaction()){for (int i = 0; i < 1000; i++)session.Insert(new Movie(){Name = "Movie " + i.ToString(),Description = "A great movie!",UnitPrice = 14.95M,Director = "Johnny Smith"});tx.Commit();}
}

2.   下一步,更新movie的价格,在Main方法中添加下面的代码:

View Code

using (var session = sessionFactory.OpenStatelessSession())
{using (var tx = session.BeginTransaction()){var movies = GetMovies(session);foreach (var movie in movies){UpdateMoviePrice(movie);session.Update(movie);}tx.Commit();}
}

3.   添加GetMovies方法:

View Code

static IEnumerable<Movie> GetMovies(IStatelessSession session)
{return session.CreateQuery("from Movie").List<Movie>();
}

4.   最后,添加UpdateMoviePrice方法:

View Code

static Random rnd = new Random();
static void UpdateMoviePrice(Movie movie)
{// Random price between $9.95 and $24.95movie.UnitPrice = (decimal) rnd.Next(10, 26) - 0.05M;
}

原理

  使用无状态会话,我们创建了1000个movie对象.无状态会话不支持事务处理的迟写机制,这意味着SQL语句不再被延迟到提交事务时.然而因为我们打开了批处理功能,所以这些语句也不会马上生效.累积100条insert语句后会被一起发送.如果关闭了批处理功能,每次调用session.Insert时,每条语句都会被立即执行,也就是一次发送一条语句.
  下一步,使用了一个查询从数据库中获取了所有的movie.这些movie是分离状态的,没有同会话相关联.实体无法和无状态会话相关联.情况就是这样的,无论是通过查询获得实体还是通过Get方法.因为无状态会话无法实现自动脏校验,所以我们必须调用session.Update来保存对每个movie的更改.

扩展

  无状态会话本质上是标准NHibernate会话的精简版.她不使用一级缓存也不执行自动脏校验,并且不支持延迟加载.事实上,她设置不保持对实体的引用,在处理成千上万的实体时,保持对实体的引用有助于避免内存泄露.级联是被忽略的.必须显式调用insert, update,或delete来操作每个实体,不会级联.无状态会话也会绕开二级缓存,事件监视器,拦截器,甚至NHibernate.SQL的log4net日志记录器.
忽略这些限制,无状态会话在需要处理实际对象的高性能批处理环境下是非常有用的.当你可以处理原始数据时,通常有更好的替代品就像原始的SQL,HQL bulk actions,SqlBulkCopy或者是ETL tools.对于原始的SQL,可以从session.Connection来简单访问ADO.NET连接对象,而且你可以如往常一样写你的ADO.NET代码.

转载于:https://www.cnblogs.com/carfieldSE/archive/2012/07/15/2592049.html

NHibernate.3.0.Cookbook第三章第9节的翻译相关推荐

  1. NHibernate.3.0.Cookbook第三章第8节的翻译

    Using session.Refresh 使用session.Refresh 特别是在桌面应用程序中,重新加载实体以反映她在不同会话中的新进修改,本节介绍如何使用session.Refresh来刷新 ...

  2. NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译

    NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译 第一章第二节Mapping a class with XML第一 ...

  3. 推荐NHibernate新书:NHibernate 3.0 CookBook[附下载]

    NHibernate 3.0 CookBook这本书在2010年10月4号出版,出版后NHibernate的Lead:Fabio Maulo赠送我一份免费优惠券,我花了几天时间阅读了这本电子书,以下是 ...

  4. Nhibernate 3.0 Cookbook学习笔记 利用XML映射类

    本文基于Nhibernate 3.0 Cookbook,下载地址:http://home.cnblogs.com/group/topic/42850.html 准备工作,下载Nhibernate:ht ...

  5. php-ml 逻辑回归,TensorFlow ML cookbook 第三章6-8节 套索和岭回归、弹性网络回归and Logistic回归...

    问题导读: 1.如何实现套索和岭回归? 2.如何实现弹性网络回归? 3.如何实施Logistic回归? 4.如何理解将线性回归转化为二元分类? 上一篇:TensorFlow ML cookbook 第 ...

  6. OpenGL 4.0 Tutorials 第三章:初始化 OpenGL 4.0

    原文地址: http://www.rastertek.com/gl40tut03.html Tutorial 3: Initializing OpenGL 4.0 第三章:初始化 OpenGL 4.0 ...

  7. 《算法笔记》第三章3.2节、3.3节、3.4节学习笔记

    <算法笔记> 第三章学习笔记 编译环境:codeblocks20.03 备注:本文留作作者自用,如有错误敬请指出 3.2节 [PAT B1041] #include<cstdio&g ...

  8. FPGA基础知识----第三章 第2节 综合和仿真

    第2节 综合和仿真 2.1 综合 Verilog 是硬件描述语言,顾名思义,就是用代码的形式描述硬件的功能,最终在硬件电路上实现该功能. 在 Verilog 描述出硬件功能后需要使用综合器对 Veri ...

  9. Nhibernate 3.0 cookbook学习笔记 配置与架构

    NHibernate项目中都有App.config,主要是用来配置项目中的日志与数据库等. 典型的App.config配置文件(这里包括log4net): View Code <?xml ver ...

最新文章

  1. python正则表达式_Python正则表达式简记和re库!
  2. Algorithm之OP:OP之GA遗传算法思路理解相关配图资料
  3. 用Word写博客园文章
  4. 使用Jmeter压力测试工具测试
  5. 家用计算机注意哪些参数,电脑小白买内存条要注意哪些?主要看哪些参数?这些知识要掌握...
  6. 自底向上——知识图谱构建技术初探
  7. 【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。...
  8. 2017.8.10 loli 测试
  9. 485. 最大连续1的个数
  10. 深入学习java虚拟机第二版学习笔记
  11. 《离散数学》-图论6.10
  12. Python安装Talib库
  13. 面向 Java 开发人员的 db4o 指南: 简介和概览
  14. Windows系统安装adb/fastboot驱动教程
  15. YYKit是个好东西-YYLabel实现一个文本多个点击事件
  16. 转载:关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解..
  17. 测试自学人必看:软件测试如何找测试项目?
  18. ImportError: Unable to import required dependencies: pytz: No module named ‘pytz‘
  19. 单阶段和两阶段目标检测
  20. Chromium网页CPU光栅化原理分析

热门文章

  1. python访问文件下载地址_用Python脚本去获得skydrive上文件的真实地址链接 + 提供脚本下载v2012-01-18...
  2. C语言 | 直接插入排序
  3. 塞尔达盾反机器人_微软商店惊现《塞尔达传说:旷野之息》!任天堂暗示《喷射战士3》?| Jump简报...
  4. python打印星星居中_python实现while循环打印星星的四种形状
  5. ln函数怎么看奇偶性_Python中函数的参数应该怎么理解?看完这篇文章情不自禁的想收藏...
  6. 未发现oracle(tm)客户端和网络组件_SpringColud Eureka的服务注册与发现
  7. java 判断对象是否是xml格式_java对象与xml格式之间的转换
  8. [渝粤教育] 中国地质大学(武汉) 文化遗产与自然遗产 参考 资料
  9. 【渝粤教育】广东开放大学 会展项目管理 形成性考核 (59)
  10. 【渝粤题库】广东开放大学 人力资源本 形成性考核