The session-management.
How you are managing the NH's session ?
The session shouldn't be closed during page rendering... more exactly...
the session shouldn't be closed before the end of the request.

2010/3/15 SedulousTurtle <[email protected]>

> Sorry, I didn't mean to imply that there was a bug in NHibernate...
>
> I'm sure I do have a few things wrong in my the code, but I don't know
> what they are, and I'm sure I'm misunderstanding some things, but I
> don't know what they are.  Can you kindly elaborate about how I'm
> messing up?
>
> Brian
>
> On Mar 15, 4:42 pm, Fabio Maulo <[email protected]> wrote:
> > Your problem is not lazy loading but the session-management (well... only
> to
> > give mention to one) and the bug is there for sure but in your
> application
> > and not in NHibernate.
> >
> > 2010/3/15 SedulousTurtle <[email protected]>
> >
> >
> >
> >
> >
> > > And I should also note: of course, using lazy="false" in the
> > > Institution class mapping
> > > (as in: <class name="Institution" lazy="false">)
> > > keeps the exception from being thrown...but I can't make this the
> > > default fix whenever I get a bug like this!
> >
> > > On Mar 15, 4:16 pm, SedulousTurtle <[email protected]>
> > > wrote:
> > > > Hi List,
> >
> > > > I'm responsible for looking at NHibernate as a potential DB solution
> > > > on our next product release -- but I'm having trouble getting my
> > > > prototype to work properly.  In a few cases, I'm getting perplexing
> > > > behaviour associated with lazy loading and proxies.  I suspect that
> > > > these are all occuring because I have some error in my understanding
> > > > of how these work.
> >
> > > > Here's my first problem.   I'm encountering a
> > > > LazyInitializationException when my WebApp testing front end tries to
> > > > display a DataGrid with information about objects of type Instrument.
> >
> > > > ---------------- Application information ------------------
> > > > The application manages electronic medical instruments in a hospital.
> >
> > > > Part of our object system is a heiarchy of parent/child relationships
> > > > (parent owns a collection of children; children have a reference to
> > > > their parent; I don't think either end is set inverse="true")
> >
> > > > Institution                       (e.g. Springfield Hospital)
> > > >     Location                     (e.g. Emergency Room)
> > > >         Instrument
> >
> > > > Institution and Location are effectively "virtual" classes (though
> > > > they're not explicitly marked as such); they each have 2 subclasses
> > > > that are used in the database.
> >
> > > > References in the source code to other objects such as
> > > > HealthCareSystem and Method are unimportant.
> >
> > > > ------------------------------------ Source Code
> > > > -------------------------------------------
> > > > <Locations.aspx.cs>
> > > > ...
> > > >         private void BindInstrumentGrid()
> > > >         {
> > > >             ...
> >
> > > >             grInstr.DataSource =
> > > > Facade.InstLoc.GetInstruments(<various parameters>);
> > > >             grInstr.DataBind();
> > > >         }
> >
> > > > <InstrumentFacade.cs>
> > > > ...
> > > >         public IList GetInstruments(<various parameters>)
> > > >         {
> > > >             IList<Instrument> instrumentList;
> > > >             ...
> >
> > > >             using (ISession ses = NHibernateHelper.OpenSession())
> > > >             using (ses.BeginTransaction())
> > > >             {
> > > >                 instrumentList = ses.CreateQuery(
> > > >                     @"SELECT instr FROM Instrument AS instr
> > > >                     JOIN instr.Method AS md
> > > >                     JOIN md.Method AS meth
> > > >                     JOIN instr.Location AS loc
> > > >                     JOIN loc.Institution AS instit
> > > >                     JOIN instit.HCSystem AS hcs
> > > >                     WHERE meth.Name=:method_name
> > > >                     AND loc.Name=:location_name
> > > >                     AND instit.Name=:institution_name
> > > >                     AND hcs.Name=:healthcaresystem_name")
> > > >                     .SetString("method_name", methodName)
> > > >                     .SetString("location_name", asLocationName)
> > > >                     .SetString("institution_name", asInstName)
> > > >                     .SetString("healthcaresystem_name",
> > > > asHCSystemName)
> > > >                     .List<Instrument>();
> >
> > > >                 foreach (Instrument i in instrumentList)
> > > >                 {
> > > >                     NHibernateUtil.Initialize(i.Location);
> > > >
> NHibernateUtil.Initialize(i.Location.Institution);
> > > >                 }
> >
> > > >                 ses.Transaction.Commit();
> > > >             }
> > > >             return instrumentList.ToList();
> > > >         }
> > > > ...
> >
> > >
> ---------------------------------------------------------------------------­­-------------------------
> >
> > > > On application execution, when BindInstrumentGrid() executes
> > > > "grInstr.DataBind();" I get the following NHibernate exception:
> > > > "Initializing[TestRecordProto.Domain.Institution#2]-Could not
> > > > initialize proxy - no Session."
> >
> > > > I partially understand why I'm getting this error, because I'm seeing
> > > > weird behavior during NHibernateUtil.Initialize() when I run in debug
> > > > mode.  Initially, i.Location is of type LocationProxy -- with its
> only
> > > > set property being "string Name".  All other properties, including
> the
> > > > int ID, is uninitialized.  But after "Initialize(i.Location)", I
> would
> > > > expect i.Location proxy would be replaced with a real object of type
> > > > Location.  But it is not in fact replaced -- the reference is left as
> > > > a proxy, and its properties do not change!  And of course then
> > > > "Initialize(i.Location.Institution)" can not really initialize the
> > > > Institution field -- because i.Location.Institution is null, because
> > > > i.Location is a proxy without instantiated properties!
> >
> > > > So I don't know what I'm doing wrong -- I'm supposed to call
> > > > Initialize() on the referenced objects that I'll need to access after
> > > > the session is closed -- and yet Initialize() isn't solving the
> > > > problem for me.  Why does this happen?
> >
> > > > The information in the database all looks correct, with the correct
> > > > links between these objects.  I have 1 record saved of type
> > > > Instrument, which is linked by foreign key to a valid Location, which
> > > > is linked  by foreign key to a valid Institution.
> >
> > > > Thank you in advance.
> >
> > > --
> > > 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]>
> <nhusers%[email protected]<nhusers%[email protected]>
> ­>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/nhusers?hl=en.
> >
> > --
> > Fabio Maulo- Hide quoted text -
> >
> > - Show quoted text -
>
> --
> 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.
>
>


-- 
Fabio Maulo

-- 
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