Hm, another problem that I run into, and I am not sure what the problem is:

public void CanDeleteItemInDtc()

        {

            object id;

            using (var tx = new TransactionScope())

            using (var s = sessions.OpenSession())

            {

                id = s.Save(new Person

                {

                    CreatedAt = DateTime.Today

                });


                new ForceEscalationToDistributedTx();



                tx.Complete();

            }


            using (var tx = new TransactionScope())

            using (var s = sessions.OpenSession())

            {

                new ForceEscalationToDistributedTx();



                s.Delete(s.Get<Person>(id));


                tx.Complete();

            }


        }


This is failing with a System.Data.SqlClient.SqlException: Distributed
transaction completed. Either enlist this session in a new transaction or
the NULL transaction.

On Sun, Mar 22, 2009 at 9:55 AM, Ayende Rahien <[email protected]> wrote:

> Correction, the DTC infrastructure will report the transaction failure back
> on TX dispose.Sweat, so my solution looks good enough to push for
> production.
>
>
> On Sun, Mar 22, 2009 at 9:52 AM, Ayende Rahien <[email protected]> wrote:
>
>> Just run into this issue.
>>
>> What would you expect this to do?
>>
>>
>>
>> [Test]
>>
>> public void WillNotCrashOnDtcPrepareFailure()
>>
>> {
>>
>>     using(var tx = new TransactionScope())
>>
>>     {
>>
>>         using (var s = sessions.OpenSession())
>>
>>         {
>>
>>             s.Save(new Person
>>
>>             {
>>
>>                 CreatedAt = DateTime.MinValue // will cause SQL date
>> failure
>>
>>             });
>>
>>         }
>>
>>
>>         new ForceEscalationToDistributedTx();
>>
>>
>>         tx.Complete();
>>
>>     }
>>
>> }
>>
>>
>> The problem is that when we fully escalate to distributed tx, the actual
>> commit is going to happen on a different thread.
>> If an exception is thrown by the commit, this is going to crash the entire
>> process.
>> Now, my problem is that I am not sure what NH's behavior should be in this
>> regard, because we don't have a good way of reporting the error to the user
>> at this point.
>> I am going to commit a fix that will swallow the exception, force a
>> rollback on the DTC and log an error.
>> I am not _happy_ about that, but I can't think of anything that will be
>> better.
>>
>
>

Reply via email to