Ah, your problem is that you are using a different connection for your
2nd statement. You need to share the transaction on both of those
operations. Here is what I do to mix NHibernate and ADO, no guarantees
but works for me.
/// <summary>
/// Use a workaround to retrieve actual transaction in use so
we can send direct ADO commands
/// in same transaction as nhibernate repositories. WARNING:
Current implementation of SqlDataAccess
/// helper methods does not reuse connection for parameter
discovery so if you are using SQL auth
/// (which you probably should be for NHibernate) then
directly specify SqlParameters to get around this
/// </summary>
/// <returns></returns>
public System.Data.SqlClient.SqlTransaction GetSqlTransaction
()
{
//use workaround to get the transaction for this
nhibernate repository so we can submit direct ADO commands on same
transaction
//
http://www.lostechies.com/blogs/joshua_lockwood/archive/
2007/04/10/how-to-enlist-ado-commands-into-an-nhibernate-
transaction.aspx
if (_SqlTransaction == null)
{
using (var cmd = new System.Data.SqlClient.SqlCommand
())
{
cmd.Connection =
(System.Data.SqlClient.SqlConnection)Session.Connection;
Transaction.Enlist(cmd);
_SqlTransaction = cmd.Transaction;
}
}
return _SqlTransaction;
}
System.Data.SqlClient.SqlTransaction _SqlTransaction = null;
On Oct 19, 9:43 pm, Fabio Maulo <
fabioma...@gmail.com> wrote:
> Personally I don't know what you are talking about.You can have x
> transactions inside the same nh-session.
> session-per-request is a pattern well documented and with thousands of
> examples.
>
> In your code the first transaction is rolled-back because the transaction is
> disposed without commit that mean rollback it.
>
> When you don't know how manage transactions the most easy way to solve the
> problem is saying:
> "Clearly NHibernate breaks when using nested transactions though, so I'm
> kind of stuck."
>
> 2009/10/19 acl123 <
andrewclawre...@gmail.com>
> Fabio Maulo- Hide quoted text -
>
> - Show quoted text -