zoukankan      html  css  js  c++  java
  • 简单的NHibernate helper类,支持同一事务的批量数据处理

    今天为了处理批量数据操作写了个简单的NHibernate helper类,支持同一事务的批量数据处理.

    转载自:http://www.cnblogs.com/rayman/archive/2005/03/27/126702.aspx

    using System;
    using System.Threading;
    using System.Collections;
    using System.Collections.Specialized;

    using Nullables;
    using Nullables.NHibernate;
    using NHibernate;
    using NHibernate.Cfg;


    namespace NHibernate.Utils {
        
    /// <summary>
        
    /// 简单的NHibernate Helper类。支持同一事务内的批量数据处理。
        
    /// </summary>

        public class NHHelper {

            
    local variables

            
    singleton pattern

            
    transaction relax
            
            
    #region public methods - CRUD
            
    public void Add( object entity ) {
                
    bool autoCommit = true;

                ISession session;
                
                
    lockthis._sessionMap.SyncRoot ){
                    
    ifthis._sessionMap[Thread.CurrentThread] != null ) {
                        session 
    = (ISession)this._sessionMap[Thread.CurrentThread];
                        
    if(  session.Transaction == null || session.Transaction.WasCommitted || 
                            session.Transaction.WasRolledBack ) 
    {
                            autoCommit 
    = true;
                        }
     else {
                            autoCommit 
    = false;
                        }

                    }
     else {
                        session 
    = this._sessionFactory.OpenSession();
                        session.BeginTransaction();
                    }

                }


                
    try {
                    session.Save( entity );
                    
    if( autoCommit ) {
                        session.Transaction.Commit();
                        session.Close();
                    }

                }
     catch (Exception ex) {
                    
    try {
                        session.Transaction.Rollback();
                    }
     catch {
                    }
     finally {
                        session.Close();
                    }

                    
    throw ex;
                }

            }



            
    public void Update( object entity, object key ) {
                
    bool autoCommit = true;

                ISession session;
                
                
    lockthis._sessionMap.SyncRoot ){
                    
    ifthis._sessionMap[Thread.CurrentThread] != null ) {
                        session 
    = (ISession)this._sessionMap[Thread.CurrentThread];
                        
    if(  session.Transaction == null || session.Transaction.WasCommitted || 
                            session.Transaction.WasRolledBack ) 
    {
                            autoCommit 
    = true;
                        }
     else {
                            autoCommit 
    = false;
                        }

                    }
     else {
                        session 
    = this._sessionFactory.OpenSession();
                        session.BeginTransaction();
                    }

                }


                
    try {
                    session.Update( entity, key );
                    
    if( autoCommit ) {
                        session.Transaction.Commit();
                        session.Close();
                    }

                }
     catch (Exception ex) {
                    
    try {
                        session.Transaction.Rollback();
                    }
     catch {
                    }
     finally {
                        session.Close();
                    }

                    
    throw ex;
                }
            
            }



            
    public void Delete( object entity ) {
                
    bool autoCommit = true;

                ISession session;
                
                
    lockthis._sessionMap.SyncRoot ){
                    
    ifthis._sessionMap[Thread.CurrentThread] != null ) {
                        session 
    = (ISession)this._sessionMap[Thread.CurrentThread];
                        
    if(  session.Transaction == null || session.Transaction.WasCommitted || 
                            session.Transaction.WasRolledBack ) 
    {
                            autoCommit 
    = true;
                        }
     else {
                            autoCommit 
    = false;
                        }

                    }
     else {
                        session 
    = this._sessionFactory.OpenSession();
                        session.BeginTransaction();
                    }

                }


                
    try {
                    session.Delete( entity );
                    
    if( autoCommit ) {
                        session.Transaction.Commit();
                        session.Close();
                    }

                }
     catch (Exception ex) {
                    
    try {
                        session.Transaction.Rollback();
                    }
     catch {
                    }
     finally {
                        session.Close();
                    }

                    
    throw ex;
                }
            
            }



            
    public void Save( object entity ) {
                
    bool autoCommit = true;

                ISession session;
                
                
    lockthis._sessionMap.SyncRoot ){
                    
    ifthis._sessionMap[Thread.CurrentThread] != null ) {
                        session 
    = (ISession)this._sessionMap[Thread.CurrentThread];
                        
    if(  session.Transaction == null || session.Transaction.WasCommitted || 
                            session.Transaction.WasRolledBack ) 
    {
                            autoCommit 
    = true;
                        }
     else {
                            autoCommit 
    = false;
                        }

                    }
     else {
                        session 
    = this._sessionFactory.OpenSession();
                        session.BeginTransaction();
                    }

                }


                
    try {
                    session.SaveOrUpdate( entity );
                    
    if( autoCommit ) {
                        session.Transaction.Commit();
                        session.Close();
                    }

                }
     catch (Exception ex) {
                    
    try {
                        session.Transaction.Rollback();
                    }
     catch {
                    }
     finally {
                        session.Close();
                    }

                    
    throw ex;
                }
            
            }



            
    public void Save( IList entities ) {
                
    this.BeginTransaction();

                
    try {
                    
    foreachobject entity in entities ) {
                        
    this.Save(entity);
                    }

                    
                    
    this.CommitTransaction();
                }
     catch (Exception ex) {
                    
    this.RollbackTransaction();
                    
    throw ex;
                }

            }



            
    public void Save( params object[] entities ) {
                
    this.BeginTransaction();

                
    try {
                    
    foreachobject entity in entities ) {
                        
    this.Save(entity);
                    }

                    
                    
    this.CommitTransaction();
                }
     catch (Exception ex) {
                    
    this.RollbackTransaction();
                    
    throw ex;
                }

            }

            
            
            
    public object Get( Type entityType, object id ) {
                
    object entity = null;
                
                
    bool closeSession = true;
                ISession session;
                
                
    lockthis._sessionMap.SyncRoot ){
                    
    ifthis._sessionMap[Thread.CurrentThread] != null && 
                        ((ISession)
    this._sessionMap[Thread.CurrentThread]).IsOpen ) {
                        session 
    = (ISession)this._sessionMap[Thread.CurrentThread];
                        closeSession 
    = false;
                    }
     else {
                        session 
    = this._sessionFactory.OpenSession();
                        closeSession 
    = true;
                    }

                }


                
    try {
                    entity 
    = session.Get( entityType, id );
                }
     catch(Exception ex)  {
                    closeSession 
    = true;
                    
    throw ex;
                }
     finally {
                    
    if( closeSession ) session.Close();
                }

                
                
    return entity;
            }


            
    #endregion

        }

    }

     
                Entity entity;
                IList entityList;

                
    //
                NHHelper.Instance.Save( entity1 );        
                NHHelper.Instance.Get( entity.GetType(), id );    
    //获得一个对象实例

                NHHelper.Instance.BeginTransaction();    
    //启动事务
                NHHelper.Instance.Add( entity );    //增加一个对象
                NHHelper.Instance.Update( entity, entity.ID );    //更新一个对象
                NHHelper.Instance.Delete( entity );    //删除一个对象
                NHHelper.Instance.Save( entity );    //增加或更新一个对象
                NHHelper.Instance.CommitTransaction();    //提交事务
                
                NHHelper.Instance.Save( entity2, entity3, entity4, entity5 );    
    //增加或更新多个对象,对象类型不用相同
                NHHelper.Instance.Save( entityList );    //增加或更新列表里的所有对象,对象类型不用相同
  • 相关阅读:
    CS01、CS02保存时增强的BADI(BOM_UPDATE)
    爱课程网(icourses.cn)的课件下载
    Java获取电脑盘符(最后一个盘符)
    打包后,配置文件找不到,json文件转java 实体对象
    前端vue history模式,后端nginx配置
    springboot 项目整合jsp文件,部署jar包
    安装node.js遇到的问题
    docker
    set up phpmyadmin with docker
    各类网络知识汇总
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2489185.html
Copyright © 2011-2022 走看看