Yes, this works, but that is not a good programming model.It means that we
have to manually manage things that TransactionScope should handle.
More than that, I _really_ don't like calling flush explicitly.

For now, I am going to commit the fix using EnglistRegisterDuringPrepare.

On Mon, Mar 23, 2009 at 7:34 PM, Fabio Maulo <[email protected]> wrote:

> I don't understand  using (var tx = new TransactionScope())
> using (var s = sessions.OpenSession())
> using(s.BeginTransaction())
> {
>
>      s.Delete(s.Get<Person>(id));
>
> s.Flush();
> s.Transaction.Commit();
>
>      tx.Complete();
>  }
> This is working ?
>
> 2009/3/23 Ayende Rahien <[email protected]>
>
>> yes
>>
>>
>> On Mon, Mar 23, 2009 at 3:12 PM, Michael Teper 
>> <[email protected]>wrote:
>>
>>>  Ayende, I am not sure what you meant by this comment, but from your
>>> other replies, it sound like you agree with me that it would be better if
>>> explicit session.BeginTransaction was not requried, correct?
>>>
>>> Thanks!
>>> -Michael
>>>
>>>  ------------------------------
>>> *From:* [email protected] [
>>> [email protected]] On Behalf Of Ayende Rahien [
>>> [email protected]]
>>> *Sent:* Monday, March 23, 2009 11:48 AM
>>>
>>> *To:* [email protected]
>>> *Subject:* [nhibernate-development] Re: More DTC issues
>>>
>>>  We don't really care for that, we let the DTC infrastructure take care
>>> of this.
>>>
>>> On Mon, Mar 23, 2009 at 12:57 PM, Michael Teper <
>>> [email protected]> wrote:
>>>
>>>>  Fabio, Ayende,
>>>>
>>>> Another thing to consider is the nested transaction scenario like this:
>>>>
>>>> using (var scopeOuter = new TransactionScope())
>>>> {
>>>>    // load / change some object(s)
>>>>
>>>>    using (var innerScope = new TransactionScope())
>>>>    {
>>>>        try
>>>>        {
>>>>            // load / change something else
>>>>            innerScope.complete();
>>>>        }
>>>>        catch { // do something }
>>>>     }
>>>>
>>>>     outerScope.complete();
>>>> }
>>>>
>>>> This may look silly but if the inner transaction is encapsulated in a
>>>> different class, this is a very plausible scenario. Wherever NH keeps track
>>>> of the current transaction scope, it needs to be aware of potential for
>>>> nesting.
>>>>
>>>> Thanks!
>>>> -Michael
>>>>
>>>>
>>>>  ------------------------------
>>>> *From:* [email protected] [
>>>> [email protected]] On Behalf Of Fabio Maulo [
>>>> [email protected]]
>>>> *Sent:* Monday, March 23, 2009 9:45 AM
>>>> *To:* [email protected]
>>>> *Subject:* [nhibernate-development] Re: More DTC issues
>>>>
>>>>
>>>>
>>>> 2009/3/23 Ayende Rahien <[email protected]>
>>>>
>>>>> The problem is that usually the DTC is opened by a lower level
>>>>> component, and my code has no control over it. More than that, I
>>>>> usually don't have control over NH's code as well.
>>>>>
>>>>>  It goes like this:
>>>>>
>>>>>  1/ low level infrastructure - dtc
>>>>> 2/ high level infarstruture - nh
>>>>> 3/ business code - my stuff
>>>>>
>>>>
>>>>  and then
>>>> 3 -end
>>>> 2- end
>>>> 1-end
>>>>
>>>>  If 2 don't know about 1, 2 should use session.BeginTransaction and
>>>> session.Transaction.Commit().
>>>>
>>>>
>>>>>
>>>>>  I don't want to be aware of all of this issues, I just want to make
>>>>> this work.
>>>>> So explicitly flushing is an option that I would generally be against.
>>>>>
>>>>>  Making NH's transaction equal to the dtc is also not a good option,
>>>>> because the use of the DTC is to manage several resources, not just NH.
>>>>>
>>>>
>>>>  You know... I never said dtc=nhTx
>>>> What I would like to avoid is If(DTC) {something} else {somethingelse}
>>>> inside NH-Core.
>>>>
>>>>  --
>>>> Fabio Maulo
>>>>
>>>
>>>
>>
>
>
> --
> Fabio Maulo
>

Reply via email to