简单的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;
lock( this._sessionMap.SyncRoot ){
if( this._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;
lock( this._sessionMap.SyncRoot ){
if( this._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;
lock( this._sessionMap.SyncRoot ){
if( this._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;
lock( this._sessionMap.SyncRoot ){
if( this._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 {
foreach( object entity in entities ) {
this.Save(entity);
}
this.CommitTransaction();
} catch (Exception ex) {
this.RollbackTransaction();
throw ex;
}
}
public void Save( params object[] entities ) {
this.BeginTransaction();
try {
foreach( object 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;
lock( this._sessionMap.SyncRoot ){
if( this._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
}
}
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;
lock( this._sessionMap.SyncRoot ){
if( this._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;
lock( this._sessionMap.SyncRoot ){
if( this._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;
lock( this._sessionMap.SyncRoot ){
if( this._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;
lock( this._sessionMap.SyncRoot ){
if( this._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 {
foreach( object entity in entities ) {
this.Save(entity);
}
this.CommitTransaction();
} catch (Exception ex) {
this.RollbackTransaction();
throw ex;
}
}
public void Save( params object[] entities ) {
this.BeginTransaction();
try {
foreach( object 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;
lock( this._sessionMap.SyncRoot ){
if( this._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 ); //增加或更新列表里的所有对象,对象类型不用相同
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 ); //增加或更新列表里的所有对象,对象类型不用相同
posted on 2012-05-07 21:49 HOT SUMMER 阅读(1625) 评论(0) 编辑 收藏 举报