I Have this scenarios that works ok:
daoManager.BeginTransaction();
daoManager.CommitTransaction();
daoManager.BeginTransaction();
daoManager.RollBackTransaction();
daoManager.OpenConnection();
daoManager.CloseConnection();
But this fail
1) daoManager.OpenConnection();
2) daoManager.BeginTransaction();
3) daoManager.CommitTransaction(false);
4) daoManager.CloseConnection();
With this Exception
IBatisNet.DataAccess.Exceptions.DataAccessException : DaoManager could
not invoke BeginTransaction(). A DaoSession is already started. Call
CommitTransaction() or RollbackTransaction first.
In line 2
I check the source code and I found in IBatisNet.DataMapper.SqlMapper
/// <summary>
/// Begins a database transaction.
/// </summary>
public IDalSession BeginTransaction()
{
if (_sessionHolder.LocalSession != null)
{
throw new DataMapperException(
"SqlMap could not invoke BeginTransaction(). A Transaction is
already started. Call CommitTransaction() or
RollbackTransaction
first.");
}
//...///
Is a bug, test for session instead for open transaction, or I missing
some piece of the puzzle.
In ADO.NET this scenario works
IdbConnection connection = <new connection>;
connection.Open()
IdbCommand cmdA = connection.CreateCommand();
<execute cmdA>
IdbTransaction transaction = connection.BeginConnection();
IdbCommand cmdB = transaction.Connection.CreateCommand();
<execute cmdB>
transaction.Commint()
connection.Close();
Thanks in advance
Un saludo:
David Marzo