With the session per request, all is fine. If you dion't use any
TransactionScope inside the SessionScope, the latter uses an implicit
transaction that spans the whole scope and is rolled back on errors.
I thought that you want to work completely without scopes in the client
code, which then disallows lazy loading.

-Markus

2009/6/17 csharp <[email protected]>

>
> Makes sense.  I am using castles http module for 1 session per
> request.
>
> I thought many transaction scopes could reside in 1 session scope,
> thus I didnt think the above code would cause a problem.
>
>
> On Jun 17, 10:21 am, Markus Zywitza <[email protected]> wrote:
> > For lazy loading, there must be a session that spans the whole lifetime
> of
> > teh object. If you don't use a SessionScope, a session will be created
> for
> > just the initial FindXXX()-call. That call creates proxies for the lazy
> > collections, that reference the session that loaded the original object.
> If
> > you now access those collections they try to load the collection, but the
> > session they refer to is already disposed.
> >
> > As a result, lazy loading must be disabled without session scopes.
> > -Markus
> > 2009/6/17 csharp <[email protected]>
> >
> >
> >
> >
> >
> > > Can you explain what you mean when you say lazy loading will not work
> > > with the code above?
> >
> > > On Jun 17, 12:27 am, Markus Zywitza <[email protected]> wrote:
> > > > Sure, you can. But it will backfire. First, you won't be able to load
> > > > anything lazily which might result in loading the whole DB with a
> simple
> > > > Entity.FindAll().
> > > > Second, the scope of transactions is dictated by the business logic.
> You
> > > > can't even model a simple debit-credit-exampe with this approach.
> >
> > > > -Markus
> >
> > > > 2009/6/17 csharp <[email protected]>
> >
> > > > > Actually, 1 last question.
> >
> > > > > I dont expose persistence concerns to anything outside my objects.
> > > > > internally can I get this to work with something like this:
> >
> > > > >        public override void Save()
> > > > >        {
> > > > >            using (TransactionScope trans = new TransactionScope())
> > > > >            {
> > > > >                try
> > > > >                {
> > > > >                    base.Save();
> > > > >                    trans.VoteCommit();
> > > > >                }
> > > > >                catch
> > > > >                {
> > > > >                    trans.VoteRollBack();
> > > > >                    throw;
> > > > >                 }
> > > > >            }
> > > > >        }
> >
> > > > > On Jun 16, 4:38 am, Markus Zywitza <[email protected]>
> wrote:
> > > > > > No, if you want the the cascade to be performed in a transaction
> you
> > > need
> > > > > to
> > > > > > put a scope around the code that calls Save().
> >
> > > > > > -Markus
> > > > > > 2009/6/16 csharp <[email protected]>
> >
> > > > > > > Thanks Markus.
> >
> > > > > > > I am using it as a named parameter on an attribute, such as :
> >
> > > > > > >        [BelongsTo(
> > > > > > >            Column = "ColumnName",
> > > > > > >            Type = typeof(TypeName),
> > > > > > >            Fetch = FetchEnum.Join,
> > > > > > >            Cascade = CascadeEnum.SaveUpdate,
> > > > > > >            NotNull = true)]
> >
> > > > > > > Doing it this way, I thought, alleviated the need for me to use
> a
> > > > > > > session scope or transaction scope.  If the cascade is
> performed
> > > > > > > automatically since it is declared in the attribute, my
> question is
> > > > > > > does it get performed inside a transaction or not?
> >
> > > > > > > Or are you saying i must override Save to put the Save method
> > > inside a
> > > > > > > transaction to be sure?
> >
> > > > > > > Thanks.
> >
> > > > > > > On Jun 15, 9:31 am, Markus Zywitza <[email protected]>
> > > wrote:
> > > > > > > > It uses the current session's transaction context: If you use
> > > > > > > SessionScope
> > > > > > > > or TransactionScope around your code, it is called within the
> > > > > > > transactions
> > > > > > > > provided by these scopes. If you call AR naked, there is no
> > > > > transaction
> > > > > > > > around the call.
> >
> > > > > > > > -Markus
> >
> > > > > > > > 2009/6/14 csharp <[email protected]>
> >
> > > > > > > > > If I specify a Cascade, such as CascadeEnum.SaveUpdate, is
> the
> > > > > save/
> > > > > > > > > update performed inside a transaction?  If not, is there a
> way
> > > to
> > > > > > > > > specify that it should be?
> >
> > > > > > > > > Thanks.
> > > > > > > > > Jason- Hide quoted text -
> >
> > > > > > > > - Show quoted text -- Hide quoted text -
> >
> > > > > > - Show quoted text -- Hide quoted text -
> >
> > > > - Show quoted text -- Hide quoted text -
> >
> > - Show quoted text -
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" 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/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to