操作NHibernate进行多事务并发处理的一些小经验
今天在做项目的时候,遇到了一些事务处理上的问题。在MSN群里咨询了DDL这些高手,结合NHB的文档看了看。写了一个小Demo,但是问题还是有不少,还需要进一步改善。。。
public void Add(Test t, string query)
{
ISessionFactoryImplementor sf = factor as ISessionFactoryImplementor;
conn = sf.OpenConnection();
ITransaction nTran = null;
try
{
// 第一个Session
session1 = factor.OpenSession(conn);
nTran = session1.BeginTransaction();
session1.Save(t);
session1.Flush();
session1.Close();
// 执行Sql语句
IDbCommand com = sf.ConnectionProvider.Driver.CreateCommand();
com.CommandText = query;
com.CommandType = CommandType.Text;
nTran.Enlist(com);
com.Connection = conn;
com.ExecuteNonQuery();
IDbTransaction tran = com.Transaction;
tran.Commit();
}
catch(Exception ex)
{
nTran.Rollback();
throw ex;
}
finally
{
session1.Close();
}
}
{
ISessionFactoryImplementor sf = factor as ISessionFactoryImplementor;
conn = sf.OpenConnection();
ITransaction nTran = null;
try
{
// 第一个Session
session1 = factor.OpenSession(conn);
nTran = session1.BeginTransaction();
session1.Save(t);
session1.Flush();
session1.Close();
// 执行Sql语句
IDbCommand com = sf.ConnectionProvider.Driver.CreateCommand();
com.CommandText = query;
com.CommandType = CommandType.Text;
nTran.Enlist(com);
com.Connection = conn;
com.ExecuteNonQuery();
IDbTransaction tran = com.Transaction;
tran.Commit();
}
catch(Exception ex)
{
nTran.Rollback();
throw ex;
}
finally
{
session1.Close();
}
}
这里无法同时执行两个Session里方法。