zoukankan      html  css  js  c++  java
  • NHibernate帮助类


     using System;
     using NHibernate;
     using NHibernate.Cfg;
     using System.Collections;
     using System.Collections.Generic;
     using System.Reflection;
     
     namespace myCRM
     {
         public sealed class DBHelperNH
         {
             #region 变量定义
             [ThreadStatic]
             private static ISession threadLocalSession;
     
             private static ISessionFactory SessionFactory = null;
     
             private static ITransaction m_TransAction = null;
             private static ISession Session = null;
             private static bool isTransAction = false;
             #endregion
     
             #region 构造函数
             static DBHelperNH()
             {
                 try
                 {
                     string strHBConfigPath = System.Environment.CurrentDirectory + @"\myCRM.cfg.xml";
                     SessionFactory = new Configuration().Configure(strHBConfigPath).BuildSessionFactory();
                 }
                 catch (Exception ex)
                 {
                     throw ex;
                 }
             }
     
             #endregion
     
             #region 连接管理
             private static ISession CreatSession()
             {
                 if (threadLocalSession == null || !threadLocalSession.IsOpen)
                     threadLocalSession = (SessionFactory != null) ? SessionFactory.OpenSession() : null;
     
                 if (!threadLocalSession.IsConnected)
                     threadLocalSession.Reconnect();
     
                 return threadLocalSession;
             }
             private static void CloseSession()
             {
                 if (threadLocalSession != null)
                 {
                     threadLocalSession.Close();
                     threadLocalSession = null;
                 }
             }
     
             #endregion
     
             #region  封装函数
     
             #region 事务的操作控制
     
             public static void BeginTransAction()
             {
                 try
                 {
                     Session = CreatSession();
                     Session.Clear();
                     m_TransAction = Session.BeginTransaction();
                     isTransAction = true;
                 }
                 catch (Exception ex)
                 {
                     throw ex;
                 }
             }
             public static void CommitTransAction()
             {
                 try
                 {
                     m_TransAction.Commit();
                 }
                 catch (Exception ex)
                 {
                     if (m_TransAction.IsActive) m_TransAction.Rollback();
                     throw ex;
                 }
                 finally
                 {
                     isTransAction = false;
                     CloseSession();
                 }
             }
     
             #endregion
     
             #region 基本数据的增删改查
     
             public static IList<T> FindAll<T>()
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     IList<T> lst = Session.CreateCriteria(typeof(T)).List<T>();
                     InitStatus<T>(lst);
     
                     return lst;
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
             public static IList<T> Find<T>(string strHQL)
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     IList<T> lst = Session.CreateQuery(strHQL).List<T>();
                     InitStatus<T>(lst);
     
                     return lst;
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
     
             public static T Get<T>(object ID)
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     T objT = Session.Get<T>(ID);
                     InitStatus<T>(objT);
     
                     return objT;
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
             public static T GetByHql<T>(string strHQL)
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     T objT = Session.CreateQuery(strHQL).UniqueResult<T>();
                     InitStatus<T>(objT);
     
                     return objT;
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
     
             public static void Save<T>(T value)
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     Session.Save(value);
                     Session.Flush();
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
             public static void Update<T>(T value)
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     Session.Update(value);
                     Session.Flush();
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
             public static void SaveOrUpdate<T>(T value)
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     Session.SaveOrUpdate(value);
                     Session.Flush();
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
             public static void Delete<T>(T value)
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     Session.Delete(value);
                     Session.Flush();
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
     
             public static int ExcDML(string strDML)
             {
                 try
                 {
                     if (!isTransAction) Session = CreatSession();
                     int count = Session.CreateQuery(strDML).ExecuteUpdate();
     
                     return count;
                 }
                 finally
                 {
                     if (!isTransAction) CloseSession();
                 }
             }
     
             #endregion
     
             #region 实实体集合和单个实体对象状态操作
     
             /// <summary>
             /// 更新实体集合状态,状态:IsAdded,IsChanged,IsDeleted,全部置为false
             /// </summary>
             /// <typeparam name="T">实体类型</typeparam>
             /// <param name="lst">实体集合</param>
             public static void InitStatus<T>(IList<T> lst)
             {
                 for (int i = 0; i < lst.Count; i++)
                 {
                     Type t = lst[i].GetType();
                     try
                     {
                         t.GetProperty("IsAdded").SetValue(lst[i], false, null);
                         t.GetProperty("IsChanged").SetValue(lst[i], false, null);
                         t.GetProperty("IsDeleted").SetValue(lst[i], false, null);
                     }
                     catch (Exception)
                     { }
                 }
             }
             /// <summary>
             /// 更新实体状态,状态:IsAdded,IsChanged,IsDeleted,全部置为false
             /// </summary>
             /// <typeparam name="T">实体类型</typeparam>
             /// <param name="value">实体对象</param>
             public static void InitStatus<T>(T value)
             {
                 Type t = value.GetType();
                 try
                 {
                     t.GetProperty("IsAdded").SetValue(value, false, null);
                     t.GetProperty("IsChanged").SetValue(value, false, null);
                     t.GetProperty("IsDeleted").SetValue(value, false, null);
                 }
                 catch (Exception)
                 { }
             }
     
             #endregion
     
             #region 公用方法集合
     
             /// <summary>
             /// 根据实体状态对实体容器进行增删改,状态:IsAdded,IsChanged,IsDeleted
             /// </summary>
             /// <typeparam name="T">实体类型</typeparam>
             /// <param name="lstIOC">实体数据容器</param>
             /// <returns>返回消息</returns>
             public static string SaveIOC<T>(IList<T> lstIOC)
             {
                 int sum = lstIOC.Count, error = 0;
     
                 string msg = "本地操作时间:\t" + DateTime.Now;
     
                 if (sum == 0) return "没有需要操作的数据!";
                 for (int i = 0; i < lstIOC.Count; i++)
                 {
                     Type t = lstIOC[i].GetType();
                     try
                     {
                         if ((bool)t.GetProperty("IsAdded").GetValue(lstIOC[i], null)) Save<T>(lstIOC[i]);
                         if ((bool)t.GetProperty("IsChanged").GetValue(lstIOC[i], null)) Update<T>(lstIOC[i]);
                         if ((bool)t.GetProperty("IsDeleted").GetValue(lstIOC[i], null)) Delete<T>(lstIOC[i]);
                     }
                     catch (Exception ex)
                     {
                         error++;
                         msg += "\n发现错误:\t" + ex.Message;
                     }
                 }
     
                 msg += "\n操作数/成功数:\t" + sum + "/" + (sum - error);
     
                 return msg;
             }
     
             #endregion
     
             #endregion
     
         }
     }


    这是我在项目中用的一个帮助类,经验水平都不高,还请各位高手分析有没有不恰当的地方啊,这个和mygeneration代码生成器配合

    mygeneration代码生成器模板NHibernate

    不得已放到首页,敬请谅解。这个类和模板如果大家觉得合适,欢迎推广使用~

  • 相关阅读:
    关于编码的问题(转)
    XML巩固
    浏览器兼容问题的解决方案
    JavaScript 全局变量命名空间生成函数
    表格的使用(转)
    post上传文件
    安装cocoapods
    UILabel内容模糊
    动态获取键盘高度
    iOS多线程同步锁
  • 原文地址:https://www.cnblogs.com/zhahost/p/1456793.html
Copyright © 2011-2022 走看看