NHibernate統一類封裝代碼

  NHibernate已經成爲.net主流的ORM框架,固然,在開發中若是須要使用NHibernate的話,咱們通常會對她進行一次封裝,以便在項目中使用更方便,以及對NHibernate有一個全局的控制。而對NHibernate的封裝也不是那麼簡單的,好比說NHibernate沒法作到誇層的封裝,意思就是在其餘層使用封裝的代碼的時候,也是須要引用NHibernate的,好比通常的IQuery條件查詢,若是須要排序或者動態條件的話,就須要傳遞ICriterion到調用層進行設置,固然若是是hql能夠使用拼接的方法,但不推薦這種拼接的方法在UI層使用,這樣跟sql沒有什麼差異。html

下面代碼是我在學習的項目中使用的一點封裝,固然沒有通過嚴格的測試,若有bug請告知。sql

 

 首先是對NHibernate的SessionFactory的封裝,這個就大同小異了session

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     }ui

 

轉自:http://www.cnblogs.com/liubiaocai/archive/2011/09/17/2179350.htmlspa

相關文章
相關標籤/搜索