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统一类封装代码的更多相关文章

  1. muduo网络库源码学习————线程本地单例类封装

    muduo库中线程本地单例类封装代码是ThreadLocalSingleton.h 如下所示: //线程本地单例类封装 // Use of this source code is governed b ...

  2. NHibernate 帮助类(单例实际运用)

    在NHibernate中,ISessionFactory是线程安全的,对应一个数据库.它是生成ISession的工厂.而ISession是线程不安全的. 创建一个ISessionFactory需要消耗 ...

  3. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  4. iOS常用动画 类封装

    //这是一个很好的动画封装类 很容易明白很详细 和大家分享 // CoreAnimationEffect.h // CoreAnimationEffect // // Created by Vince ...

  5. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  6. 关于TornadoFx和Android的全局配置工具类封装实现及思路解析

    原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...

  7. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  8. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  9. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

随机推荐

  1. Android开发系列之ListView

    上篇博客解决了Android客户端通过WebService与服务器端程序进行交互的问题,这篇博客重点关注两个问题,一个是Android应用程序如何与本机文件型数据库SQLite进行交互,另一问题则是如 ...

  2. memcached一些整理

        .NET中使用Memcached的相关资源整理   Memcached官方站点:http://www.danga.com/memcached/ Memcached Win32 1.2.6下载: ...

  3. 2015版App推广全攻略(完整版)

    线上渠道 1.基础上线 各大手机厂商市场.第三方应用商店.大平台.PC下载站.手机WAP站.收录站.移动互联网应用推荐媒体等等基本可以覆盖Android版本发布渠 道:推广的第一步是要上线,这是最基础 ...

  4. Python3.4 多线程

    线程安全和全局解释器锁 Thread State and the Global Interpreter Lock 总结: 通过使用GIL后, Python多线程安全, 并且数据保持同步. Python ...

  5. Python设计模式——装饰模式(Decorator)

    假如我们需要开发一个程序来展示一个人穿衣服的过程. #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' class Person(): def __in ...

  6. 【IT历史】SP和CP

    1.什么是SP?SP是英文Service Provider的缩写,中文翻译为服务提供商,通常是指在移动网内运营增值业务的社会合作单位.它们建立与移动网络建立相连的服务平台,为手机用户提供一系列信息服务 ...

  7. 【Groovy】入门布道ppt

    Groovy Outline• Hello world• Smooth Java integration• Flat learning curve• Powerful features 跟 Java ...

  8. 【JSF框架】 是一种标准

    典型的JSF应用程序包含下列部分: 一组JSP页面 一组后台bean(为在一个页面上的UI组件定义的属性和函数的JavaBean组件) 应用程序配置资源文件(定义页面导航规则.配置bean和其它的自定 ...

  9. 敏捷开发的价值观(转自MBAlib)

    敏捷开发的价值观 实际上敏捷开发运动在数年前就开始了,但它正式开始的标志是2001年2月的“敏捷宣言”(Agile Manifesto),这项宣言是由17位当时称之为“轻量级方法学家”所编写签署的,他 ...

  10. 6 款国外开源web oa办公系统(转)

    国外的开源产品较多,而且大多提供免费的社区版本,oa办公系统也不例外. 1.eGroupware eGroupware是一个多用户,在以PHP为基础的API上的定制集为基础开发的,以WEB为基础的工作 ...