I'm using basically all the boiler plate code from the CodeSmith templates for the nHibernate session stuff, with entity classes from s#harp.
Actually if I look at the iSession object from nHibernate BEFORE and AFTER, they say the connection is still open, and if you look at the underlying ADO connection it is still open. So I have no idea why nHibernate is not wanting to grab the data. I only initialize the propertys in this instance as it is a long running unit of work that takes about 20 seconds to complete. It's a complete mystery to me, but if I access the propertys BEFORE I put them in to the dictionary things work just fine. If I access them AFTER i put them into the dictionary then that is where things go haywire and I get the LazyInitializationException. On Sep 28, 11:10 am, Fabio Maulo <[email protected]> wrote: > You are not working with session-per-request or your session instance is > stored outside the request context. > > > > > > On Tue, Sep 28, 2010 at 12:13 PM, MattO <[email protected]> wrote: > > InitializeLazyPropertys procedure seems to fix things quite well. > > > Actual code is as follows (above code is incorrect) > > > void InitializeLazyPropertys(params object[] propertys); //Added a > > simple mechanism for initializing lazy propertys at runtime > > > public void InitializeLazyPropertys(params object[] propertys) > > { > > foreach (object prop in propertys) > > NHibernateUtil.Initialize(prop); > > } > > > On Sep 28, 9:42 am, MattO <[email protected]> wrote: > > > Well it may be because I'm copying my object to a dictionary and then > > > later accessing one of the lazy propertys. Would this cause it? > > > > Here is the code: > > > > Dictionary<int, ItemBankCoreNH.BusinessObjects.Form> de = new > > > Dictionary<int, ItemBankCoreNH.BusinessObjects.Form>(); > > > > The above line just declares my business object dictionary which will > > > contain "Form" entitys that I get from nHibernate. > > > > ItemBankCoreNH.BusinessObjects.Form frm = > > > formManager.GetById(Convert.ToInt32(listItem.Value)); > > > > The above line is where I get the actual form object. > > > > I now have what I need (but have not accessed any of the lazy > > > propertys of the frm (Form) object yet). > > > > I now add it to the dictionary. > > > > de.Add(frm.Id, frm); > > > > Now a lot of other code processes, but later on in the code (about 50 > > > lines later), I access the property and I get the > > > LazyInitializationException. > > > > Does copying it into the dictionary somehow disconnect it from the > > > session? > > > > For now I've created a basic function as follows and am initializing > > > all Lazy propertys ahead of time (before adding to the dictionary) and > > > I think it might solve it (but haven't tested it yet). > > > > Here is the code: formManager.InitializeLazyPropertys(frm); > > > > Here is the interface: > > > > void InitializeLazyPropertys(params T[] propertys); //Added a simple > > > mechanism for initializing lazy propertys at runtime > > > > And the implementation: > > > > public void InitializeLazyPropertys(params T[] propertys) > > > { > > > foreach (T prop in propertys) > > > NHibernateUtil.Initialize(prop); > > > } > > > > On Sep 28, 9:24 am, Oskar Berggren <[email protected]> wrote: > > > > > The following applies since at least NH 2.0: > > > > The fact that the ISession releases the connection is not the cause of > > > > your problem. > > > > If NHibernate is managing the database connections by itself, the > > > > ISession will release the underlying ado.net connection whenever there > > > > is no active transaction. This is to avoid holding connections that > > > > isn't used. A connection will be retrieved again when needed. > > > > > Your real problem is hidden in your code somewhere. > > > > > /Oskar > > > > > 2010/9/28 MattO <[email protected]>: > > > > > > I use session per request, therefore the session should stay open for > > > > > the duration of my ASP .NET request, but it does not seem to be doing > > > > > that. > > > > > > Instead nHibernate seems to be closing the connection and I'm not > > sure > > > > > why. > > > > > > Here is the important parts of the log: > > > > > > 2010-09-28 08:47:20,536 [12] INFO NHibernate.Loader.Loader [(null)] > > - > > > > > SELECT COUNT(*) AS Count FROM FormDetail INNER JOIN Items ON > > > > > FormDetail.RecordID = Items.RecordID WHERE (Items.QTypeID = @p0) and > > > > > form...@p1 > > > > > 2010-09-28 08:47:20,551 [12] DEBUG > > > > > NHibernate.Connection.DriverConnectionProvider [(null)] - Obtaining > > > > > IDbConnection from Driver > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.AdoNet.AbstractBatcher > > > > > [(null)] - ExecuteReader took 3 ms > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.AdoNet.AbstractBatcher > > > > > [(null)] - Opened IDataReader, open IDataReaders: 1 > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.Loader.Loader [(null)] > > - > > > > > processing result set > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.Loader.Loader [(null)] > > - > > > > > result set row: 0 > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.Loader.Loader [(null)] > > - > > > > > result row: > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.Type.Int32Type [(null)] > > > > > - returning '0' as column: Count > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.Loader.Loader [(null)] > > - > > > > > done processing result set (1 rows) > > > > > 2010-09-28 08:47:20,551 [12] DEBUG > > NHibernate.Driver.NHybridDataReader > > > > > [(null)] - running NHybridDataReader.Dispose() > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.AdoNet.AbstractBatcher > > > > > [(null)] - Closed IDataReader, open IDataReaders :0 > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.AdoNet.AbstractBatcher > > > > > [(null)] - DataReader was closed after 3 ms > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.AdoNet.AbstractBatcher > > > > > [(null)] - Closed IDbCommand, open IDbCommands: 0 > > > > > 2010-09-28 08:47:20,551 [12] DEBUG > > NHibernate.AdoNet.ConnectionManager > > > > > [(null)] - aggressively releasing database connection > > > > > 2010-09-28 08:47:20,551 [12] DEBUG > > > > > NHibernate.Connection.ConnectionProvider [(null)] - Closing > > connection > > > > > 2010-09-28 08:47:20,551 [12] DEBUG > > > > > NHibernate.Engine.StatefulPersistenceContext [(null)] - initializing > > > > > non-lazy collections > > > > > 2010-09-28 08:47:20,551 [12] DEBUG > > NHibernate.AdoNet.ConnectionManager > > > > > [(null)] - after autocommit > > > > > 2010-09-28 08:47:20,551 [12] DEBUG NHibernate.Impl.SessionImpl > > > > > [(null)] - transaction completion > > > > > 2010-09-28 08:47:20,551 [12] DEBUG > > NHibernate.AdoNet.ConnectionManager > > > > > [(null)] - aggressively releasing database connection > > > > > 2010-09-28 08:47:22,829 [12] ERROR > > > > > NHibernate.LazyInitializationException [(null)] - > > > > > Initializing[ItemBankCoreNH.BusinessObjects.Form#BS]-failed to lazily > > > > > initialize a collection of role: > > > > > ItemBankCoreNH.BusinessObjects.Form.ExamTypes, no session or session > > > > > was closed > > > > > NHibernate.LazyInitializationException: > > > > > Initializing[ItemBankCoreNH.BusinessObjects.Form#BS]-failed to lazily > > > > > initialize a collection of role: > > > > > ItemBankCoreNH.BusinessObjects.Form.ExamTypes, no session or session > > > > > was closed > > > > > > -- > > > > > 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 athttp:// > > groups.google.com/group/nhusers?hl=en.-Hide quoted text - > > > > > - Show quoted text -- 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- 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]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
