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