So I went and tested it, but mixing TransactionScope and NH transaction got
NH complaining:
NHibernate.TransactionException : Begin failed with SQL exception
----> System.InvalidOperationException : Nested transactions are not
supported.
NHibernate.Transaction.AdoTransaction - Begin transaction failed
System.InvalidOperationException: Nested transactions are not supported.
at MySql.Data.MySqlClient.MySqlConnection.BeginTransaction(IsolationLevel
iso)
at MySql.Data.MySqlClient.MySqlConnection.BeginDbTransaction(IsolationLevel
isolationLevel)
at
System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction()
at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel
isolationLevel) in
d:\CSharp\NH\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs:line
130
Here's my code:
using (var transactionScope = new TransactionScope())
using (var session = sessionFactory.OpenSession())
using (var tx = session.BeginTransaction()) // throws exception when
calling BeginTransaction()
{
}
On Wed, Aug 18, 2010 at 3:40 PM, Frans Bouma <[email protected]> wrote:
> > I always commit the NH transaction. I'm not sure. Try it and see.
>
> Inside a transaction scope, all db transaction using objects
> subscribe to a 'manager' which tells the transaction scope how the outcome
> of their db transaction turned out: rollback or commit. When you commit a
> db
> transaction (through an nh transaction) it should vote for 'commit' at the
> controlling transaction scope.
>
> At transactionscope complete, all controlled transactions' votes are
> checked and if one wants to rollback, everything is rolled back or
> committed. This is done by calling the subscribed managers that the
> transactions can be committed or have to be rolled back. At that moment
> NH's
> code gets a call to commit or rollback. So if you call it beforehand, it
> simply should vote for commit and do nothing else but wait for the scope's
> final 'judgment' ;)
>
> FB
>
> > On Wed, Aug 18, 2010 at 6:59 AM, Jacob Madsen <[email protected]> wrote:
> >
> >
> > "session.Transaction.Commit()" is invoked by the NH internals, when
> > transactionScope.Complete() is invoked, right?
> >
> >
> > On Wed, Aug 18, 2010 at 1:56 PM, Jacob Madsen <[email protected]>
> wrote:
> >
> >
> > Ahh.. great details!
> >
> > On Wed, Aug 18, 2010 at 1:53 PM, Fabio Maulo
> > <[email protected]> wrote:
> >
> >
> > First of all thanks to avoid the annoying
> discussion
> > about "I don't want use NH's transaction" and try it as I said you.
> >
> > In releasenote.txt under
> > ** BREAKING CHANGES from NH1.2.1GA to NH2.0.0
> > you can find this
> > * AutoFlush will not occur outside a transaction -
> > Database transactions are never optional, all communication with the
> > database must occur inside a transaction, whatever you read or write
> data.
> >
> > The NH's transaction is, sorry to be redundant, the
> > NH's transaction. You have to use it because NH need it to take in
> account
> > all operations under NH responsibility (it include cache, UoW and
> > transactionscope).
> >
> > Because NH's transaction is not 1:1 with
> DB-transaction
> > the TransactionScope is not a substitute of NH's transaction.
> >
> > On Wed, Aug 18, 2010 at 8:37 AM, Jacob Madsen
> > <[email protected]> wrote:
> >
> >
> > Love the feature :-)
> >
> > Why do you also begin a nhibernate
> transaction?
> >
> >
> >
> >
> > On Wed, Aug 18, 2010 at 1:08 PM, Fabio
> Maulo
> > <[email protected]> wrote:
> >
> >
> >
> > using(var transactionScope = new
> > TransactionScope())
> > using(var session =
> > sessionFactory.OpenSession())
> > using(var tx =
> > session.BeginTransaction())
> > {
> > var someEntity =
> > session.Get<SomeEntityType>(someId);
> >
> > someEntity.Name = "bla";
> > ....
> > transactionScope.Complete();
> >
> >
> > NH will use autodirty check
> >
> >
> >
> > On Wed, Aug 18, 2010 at 7:53 AM,
> Jacob
> > Madsen <[email protected]> wrote:
> >
> >
> > So I do not need to make an
> > explicit Update(someEntity) call?
> >
> > using(var transactionScope
> =
> new
> > TransactionScope())
> > using(var session =
> > sessionFactory.OpenSession())
> > {
> > var someEntity =
> > session.Get<SomeEntityType>(someId);
> >
> > someEntity.Name = "bla";
> >
> >
> session.Update(someEntity); // I
> > want to avoid these explicit Update-calls by tracking the (dirty)
> entities
> > in a session and do a single call to a "void SaveChanges()" method. The
> > "SaveChanges" method should do the updating on the entities in a session.
> I
> > still want to explicitly insert new entities with
> session.Save(newEntity),
> > which I abstract and in a method called "Store".
> >
> >
> transactionScope.Complete();
> > }
> >
> >
> > On Tue, Aug 17, 2010 at
> 10:30 AM,
> > Dwarrel <[email protected]> wrote:
> >
> >
> > Yes, you would not
> want to
> > use it for that reason, flush will do that
> > automatically.
> Unfortunately
> > I do sometimes crave for a way to see
> > which objects are
> in
> the
> > session. Sometimes I would want to evict all
> > objects of a
> certain
> type
> > from the session cache. This if you have a
> > longer running
> session and
> > someone else has updated the DB values.
> > There is no known
> way of
> > evicting say all purchase info and then re-
> > run a query to load
> the
> > relevant ones. If you don't evict them then
> > you get a strange
> mix of
> > stale and current information as your query
> > result (even when
> having the
> > version number available!)
> >
> >
> > On Aug 16, 3:33 pm,
> Jason
> > Dentler <[email protected]> wrote:
> > > Automatic dirty
> checking
> > will take care of this when the session is flushed
> > > (which normally
> happens
> > when you commit a transaction)
> > >
> > >
> > >
> >
> > > On Mon, Aug 16,
> 2010 at
> > 4:27 AM, Jacob Madsen <[email protected]> wrote:
> > > > Hi all,
> > >
> > > > Is there a
> method to
> > retrieve references to all entities known by a
> > > > session
> > >
> > > > using (var
> session =
> > sessionFactory.OpenSession())
> > > > {
> > > > var entity =
> > session.Get<SomeType>(someId); // "entity" is now
> > > > known by the
> session
> > > > ....
> > > > var
> allKnownEntities
> > = /* here I want to retrieve all entities
> > > > known/attached
> to a
> > session */
> > > > ....
> > > > }
> > >
> > > > I want to
> implement a
> > "void SaveChanges()" method that will Update all
> > > > modified
> entities known
> > by a session.
> > >
> > > > Cheers!
> > >
> > > > --
> > > > You received
> this
> > message because you are subscribed to the Google Groups
> > > > "nhusers"
> group.
> > > > To post to this
> group,
> > send email to [email protected].
> > > > To unsubscribe
> from this
> > group, send email to
> >
> > > >
> > [email protected]<nhusers%[email protected]>
> > <mailto:nhusers%[email protected]<nhusers%[email protected]>
> >
> > <nhusers%[email protected]<nhusers%[email protected]>
> > <mailto:nhusers%[email protected]<nhusers%[email protected]>>
> ->
> >
> > > > .
> > > > For more
> options, visit
> > this group at
> >
> > >
> > >http://groups.google.com/group/nhusers?hl=en.- Hide quoted text -
> > >
> > > - Show quoted
> text
> -
> >
> > --
> >
> > You received this
> message
> > because you are subscribed to the Google Groups "nhusers" group.
> > To post to this
> group, send
> > email to [email protected].
> > To unsubscribe from
> this
> > group, send email to
> > [email protected]<nhusers%[email protected]>
> > <mailto:nhusers%[email protected]<nhusers%[email protected]>>
> .
> > For more options,
> visit this
> > group at http://groups.google.com/group/nhusers?hl=en.
> >
> >
> >
> >
> >
> >
> > --
> >
> > You received this message
> because
> > you are subscribed to the Google Groups "nhusers" group.
> > To post to this group, send
> email
> > to [email protected].
> > To unsubscribe from this
> group,
> > send email to
> > [email protected]<nhusers%[email protected]>
> > <mailto:nhusers%[email protected]<nhusers%[email protected]>>
> .
> > For more options, visit
> this
> group
> > at http://groups.google.com/group/nhusers?hl=en.
> >
> >
> >
> >
> >
> > --
> > Fabio Maulo
> >
> >
> >
> >
> >
> > --
> >
> > You received this message because
> you are
> > subscribed to the Google Groups "nhusers" group.
> > To post to this group, send email
> to
> > [email protected].
> > To unsubscribe from this group,
> send
> > email to
> > [email protected]<nhusers%[email protected]>
> > <mailto:nhusers%[email protected]<nhusers%[email protected]>>
> .
> > For more options, visit this group
> at
> > http://groups.google.com/group/nhusers?hl=en.
> >
> >
> >
> >
> >
> > --
> > You received this message because you are
> > subscribed to the Google Groups "nhusers" group.
> > To post to this group, send email to
> > [email protected].
> > To unsubscribe from this group, send email
> to
> > [email protected]<nhusers%[email protected]>
> > <mailto:nhusers%[email protected]<nhusers%[email protected]>>
> .
> > For more options, visit this group at
> > http://groups.google.com/group/nhusers?hl=en.
> >
> >
> >
> >
> >
> > --
> > Fabio Maulo
> >
> >
> >
> >
> >
> > --
> > You received this message because you are
> subscribed
> to
> > the Google Groups "nhusers" group.
> > To post to this group, send email to
> > [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<nhusers%[email protected]>
> > <mailto:nhusers%[email protected]<nhusers%[email protected]>>
> .
> > For more options, visit this group at
> > http://groups.google.com/group/nhusers?hl=en.
> >
> >
> >
> >
> >
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "nhusers" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<nhusers%[email protected]>
> > <mailto:nhusers%[email protected]<nhusers%[email protected]>>
> .
> > For more options, visit this group at
> > http://groups.google.com/group/nhusers?hl=en.
> >
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "nhusers" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<nhusers%[email protected]>
> .
> > For more options, visit this group at
> > http://groups.google.com/group/nhusers?hl=en.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.