zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    完美解决CTRL+空格不能切换中/英文输入法的问题
    【Delphi内联汇编学习1】Delphi与汇编
    替换bmp图片中的颜色 good
    将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)
    在delphi的exe文件中嵌入另外一个exe文件
    Qt中的串口编程之三
    使用MIDAS访问远程Access数据库
    QSqlDatabase的进一步封装(多线程支持+更加简单的操作)——同时支持MySQL, SQL Server和Sqlite
    Qt for Linux:环境搭建(CentOS 6.5 32位)——完全从零安装
    Qt for Windows:使用WinPcap开发高性能UDP服务器
  • 原文地址:https://www.cnblogs.com/elim/p/4353071.html
Copyright © 2011-2022 走看看