By the way, calling Session.Flush with "flush on commit" is a good
indication that you are doing something wrong. You should be using an
NHibernate transaction instead.

On Thu, Aug 26, 2010 at 5:52 AM, Jason Dentler <[email protected]>wrote:

> First, you must use an NHibernate transaction for all database interaction.
> TransactionScope is not a substitute.
>
> Second, TransactionScope should only be used when you need to coordinate
> more than one resource. Even then, you should still use an NHibernate
> transaction as well.
>
> Third, TransactionScope allows each resource to vote whether the
> transaction should be rolled back or committed. If everyone votes commit,
> then it's committed. When you use a real NH transaction, you can control
> which way NHibernate will vote.
>
> On Thu, Aug 26, 2010 at 1:12 AM, MixMasta <[email protected]> wrote:
>
>> I am using a .NET transaction scope and running the following to
>> verify transaction commits/rollbacks
>> Using 2.1 nhibernate talking to SQL server db.
>>
>> var b1 = new Person {Email = "[email protected]", Username = "art"};
>> using (var session = NHibernateSession.CurrentFor("MyDatabase"))
>> {
>>      session.Save(b1);
>>      session.Flush();
>>  }
>> //Writes b1 away to database
>>
>> using (var tx = new TransactionScope())
>> {
>>     using (var session = NHibernateSession.CurrentFor("MyDatabase"))
>>     {
>>          var b2 = (Person)session.Load(typeof(Person), b1.Id);
>>          b2.Username = "art1234";
>>          session.Flush();
>>      }
>>       tx.Complete();
>> }
>>
>> using (var session = NHibernateSession.CurrentFor("MyDatabase"))
>> {
>>     var b3 = (Person)session.Load(typeof(Person), b1.Id);
>>     Assert.IsTrue(b3.Username == "art");
>> }
>>
>>
>> If I leave the session.Flush() uncommented the transaction commits
>> even if I have the tx.Complete() commented out - I was expecting the
>> transaction scope to decide whether to commit those changes. If I
>> comment out session.Flush() and don't set tx.Complete() then the
>> transaction rolls back as expected.
>>
>> My guess is that session.Flush creates its own implicit transaction
>> and commits it and ignores the current .NET transaction scope.
>>
>> Thanks
>>
>> --
>> 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.

Reply via email to