NHibernate统一类封装代码
NHibernate已经成为.net主流的ORM框架,当然,在开发中如果需要使用NHibernate的话,我们一般会对她进行一次封装,以便在项目中使用更方便,以及对NHibernate有一个全局的控制。而对NHibernate的封装也不是那么简单的,比如说NHibernate无法做到夸层的封装,意思就是在其他层使用封装的代码的时候,也是需要引用NHibernate的,比如一般的IQuery条件查询,如果需要排序或者动态条件的话,就需要传递ICriterion到调用层进行设置,当然如果是hql可以使用拼接的方法,但不推荐这种拼接的方法在UI层使用,这样跟sql没有什么差别。
下面代码是我在学习的项目中使用的一点封装,当然没有经过严格的测试,如有bug请告知。
首先是对NHibernate的SessionFactory的封装,这个就大同小异了
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Web;
6 using NHibernate;
7 using NHibernate.Cfg;
8 using System.Collections;
9
10 namespace LBC.Permission.DAL
11 {
12
13 public class NHSessionFactory
14 {
15 private static readonly object lockObj = new object();
16 private static NHSessionFactory instance = null;
17 private static ISessionFactory factory;
18
19 private NHSessionFactory() { }
20
21 public static NHSessionFactory Instance
22 {
23 get
24 {
25 if (instance == null)
26 {
27 lock (lockObj)
28 {
29 if (instance == null)
30 {
31 instance = new NHSessionFactory();
32 Configuration cfg = new Configuration();
33 factory = cfg.Configure().BuildSessionFactory();
34 }
35 }
36 }
37 return instance;
38 }
39 }
40
41 public ISession GetCurrentSession()
42 {
43 return factory.GetCurrentSession();
44 }
45
46 public ISession OpenSession()
47 {
48 return factory.OpenSession();
49 }
50
51 public ISessionFactory SessionFactory
52 {
53 get
54 {
55 return factory;
56 }
57 }
58
59 }
60 }
然后是对常用方法的封装
1 public partial class DataAccess
2 {
3 private ISession session;
4
5 public DataAccess()
6 {
7 session = NHSessionFactory.Instance.GetCurrentSession();
8 }
9
10 #region Transaction
11
12 public void Transaction(Action action)
13 {
14 ITransaction transaction = session.BeginTransaction();
15 try
16 {
17 action();
18 transaction.Commit();
19 }
20 catch
21 {
22 transaction.Rollback();
23 throw;
24 }
25 }
26
27 public void Transaction(Action action, System.Data.IsolationLevel isolationLevel)
28 {
29 ITransaction transaction = session.BeginTransaction(isolationLevel);
30 try
31 {
32 action();
33 transaction.Commit();
34 }
35 catch
36 {
37 transaction.Rollback();
38 throw;
39 }
40 }
41
42 #endregion
43 }
转自:http://www.cnblogs.com/liubiaocai/archive/2011/09/17/2179350.html
NHibernate统一类封装代码的更多相关文章
- muduo网络库源码学习————线程本地单例类封装
muduo库中线程本地单例类封装代码是ThreadLocalSingleton.h 如下所示: //线程本地单例类封装 // Use of this source code is governed b ...
- NHibernate 帮助类(单例实际运用)
在NHibernate中,ISessionFactory是线程安全的,对应一个数据库.它是生成ISession的工厂.而ISession是线程不安全的. 创建一个ISessionFactory需要消耗 ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
- iOS常用动画 类封装
//这是一个很好的动画封装类 很容易明白很详细 和大家分享 // CoreAnimationEffect.h // CoreAnimationEffect // // Created by Vince ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- 关于TornadoFx和Android的全局配置工具类封装实现及思路解析
原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
随机推荐
- centos 6.5 x64编译有python的vim7.4
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gzwget ftp://ftp.vim.org/pub/vim/extra/vim-7. ...
- jQuery 1.4.4 中 function( window, undefined ) 写法原因
读 jQuery 1.4.4 版本代码的时候,发现下面的写法: (function( window, undefined ) { ... // code goes here })(window); w ...
- 判断浏览器是否支持某个css3属性的javascript方法
判断浏览器是否支持css3某个属性的方法: /** * 判断浏览器是否支持某一个CSS3属性 * @param {String} 属性名称 * @return {Boolean} true/false ...
- python参考手册 Read
P28 复制 a = [1,2,3,[1,2]] b = a b is a # True c = list[a] # shallow copy c is a # False c[3][0] = 100 ...
- [转载]C#读取Excel几种方法的体会
C#读取Excel几种方法的体会 转载地址:http://developer.51cto.com/art/201302/380622.htm (1) OleDb: 用这种方法读取Excel速度还是非常 ...
- Kinetic使用注意点--animation
new Animation(func, layers) 参数: func:每一帧都会调用一次此函数.此函数接收一个包含四个元素的参数对象,时间单位均为毫秒. { timeDiff:"上一帧和 ...
- Jetty使用
目标:在Linux以及Windows下面配置应用: 之前使用过smartfox,安装的时候弹出一个浏览器,一路next,印象很深刻.只是记得他是使用Jetty.最近做的项目也是需要进行配置:过往都是使 ...
- Codeforces Round #328 div2
Problem_A(592A): 题意: 在一个8*8的棋盘上有黑白两种棋子,'W'代表白色,'B'代表黑色. 玩家A执白子,先走. 白子只能向上走,黑子只能向下走.如果有障碍物则不能走, 比如白色的 ...
- input标签文字点击变颜色
<input type="text" class="ser_input"value="从这里搜索(^_^)" onfocus=&quo ...
- SQL中Case的使用方法(下篇)(转)
接上篇 四,根据条件有选择的UPDATE. 例,有如下更新条件 工资5000以上的职员,工资减少10% 工资在2000到4600之间的职员,工资增加15% 很容易考虑的是选择执行两次UPDATE语句, ...