the only ugly solution we've thought about in the test to enter the line Session.Refresh(_entity3List.Current);
than it seems to open the proxies , refresh the object and to get the data. it seems the wrong approach . doesn't feel wright. On Jan 25, 9:40 am, Gregory Kaidanov <[email protected]> wrote: > Thanks for the response. > > 1). Removed LazyLoad from general mapping and mapped only the > relationships as LazyLoad. > 2).Removed the try- catch from the mapping, and left only try-catch in > configuration file > 3).The previous test looked like this : > _productRetrieval = Session.Get<Entity1>(TMD_RECID); > > Assert.AreNotEqual(_productRetrieval.Col_Entity2, > null); > IEnumerator<Entity2> _entity2List = _entity1.Col_ > Entity2.GetEnumerator(); > _Entity2List.MoveNext(); > IEnumerator<Entity3> _entity3List = > _entity2List.Current.Col_Entity3.GetEnumerator(); > _entity3List.MoveNext(); > Assert.AreNotEqual(_entity3List.Current.Col2, 0); > > And still I've got the mistake of initializing lazyload. > 4).I"ll check the option of > CompositeId().AddPropertyKey(x=> x.Col1).AddPropertyKey(x=>x.Col2) > And get back to you on that. > If you have some example that shows joining by 2 column other than ID > that will help us a lot . > > On Jan 24, 6:47 pm, Hudson Akridge <[email protected]> wrote: > > > > > Going to try taking a stab at this. > > > First, what's probably a better idea for you to lazy load, is the > > collections themselves instead of putting a lazy load on the entities and > > expecting everything to lazy load the entity. Fortunately LazyLoad is the > > default for collections in NHibernate so it's being implicitly set. So, to > > rule out possible conflicting variables, I'd recommend first removing the > > LazyLoad() calls from your mappings. > > > Second, there's no need to put your mapping blocks in a try/catch. I don't > > believe that will give you an NHibernate exception, because when the > > ClassMap mappings are executed, you're in FNH territory, and you'd only get > > an exception if there was an issue with how you've configured a FNH mapping. > > It then takes those, and creates an NHibernate mapping file as a result, > > then loads that in the config. You'd be better off putting the try/catch on > > your configuration class when you call .Configure(). > > > Third, to get to the root of the issue. How you're getting to entity3 does > > not seem correct to me. You should be loading entity1, then going through > > entity 1's collection of entity2's to get an entity2, then go through > > entity2's collection of entity3's to get an entity3. What you're doing is > > putting each new entity in a new collection and then expecting the class > > lazy load to handle lazy loading the sub-collection. To simplify, do not put > > the entities in a new list. Do something like: > > > _entity2 =_entity.Col_Entity2.First(); > > _entity3 = _entity2.Col_Entity3.First(); > > > By copying the collection of entity2's into a new list (and entity3), you're > > getting around the proxy class of your entities that NHibernate created for > > you. Those proxies are important, because they handle how to lazy load > > entities through collections. Otherwise, your session probably won't know > > how to go out and get the entity it's attempting to load. You're basically > > circumventing the proxy responsible for lazyloading, and then wondering why > > you're getting an error lazy loading ;) . > > > It also seems, based on your other posts, that you're having issues with > > propertyref with multiple columns. That is true, propertyref will only work > > with one column (as far as I know with current version NH). If you're in a > > legacy database, you might want to look at mapping each of your classes with > > CompositeId().AddPropertyKey(x=> x.Col1).AddPropertyKey(x=>x.Col2), instead > > of mapping the recid. If the RecId is not actually ever used for a > > relationship anywhere, then it's not what NHibernate would term an Id. > > CompositeId map your Col1 and Col2, then you don't need to do a propertyref > > everywhere. That might help resolve your other issues. > > > On Sun, Jan 24, 2010 at 10:27 AM, Gregory Kaidanov > > <[email protected]>wrote: > > > > Hi! > > > I've came across this problem , and no idea how to resolve the > > > situation. > > > > I have a model such as: > > > > entity1 > > > hasmany(entity2) > > > > entity2 > > > hasmany(entity3) > > > > at my test I am trying to get entity3 through entity1 > > > and getting this message . > > > does anyone have some clue how to resolve it ? > > > > my entities looks like this : > > > > public class Entity1 : Entity > > > { > > > #region "Relationships" > > > private ICollection< Entity2> _col_ Entity2 = new HashSet< > > > Entity2 >(); > > > > public virtual ICollection< Entity2 > Col_ Entity2 > > > { > > > get { return _col_ Entity2 ; } > > > protected set { _col_ Entity2 = value; } > > > } > > > #endregion > > > } > > > > public class Entity2 : Entity > > > { > > > #region "Relationships" > > > private ICollection< Entity3> _col_ Entity3 = new HashSet< > > > Entity3 >(); > > > > public virtual ICollection< Entity3 > Col_ Entity3 > > > { > > > get { return _col_ Entity3 ; } > > > protected set { _col_ Entity3 = value; } > > > } > > > #endregion > > > } > > > > at the mapping : > > > > public class Entity1 Mapping : ClassMap< Entity1 > > > > { > > > public Entity1Mapping() > > > { > > > try > > > { > > > LazyLoad(); > > > Table("tableSource"); > > > > Id(x => x.ID).Length(10).Column("RECID"); > > > Map(x => x.Col1).Column("COLUMN1"); > > > HasMany<Entity2>(x => x.Col_ Entity2).AsBag() > > > .KeyColumn("COLUMN_OF_CHILD_TO_JOINBY") > > > .PropertyRef("Col1"); > > > > } > > > catch (NHibernate.HibernateException ex) > > > { > > > throw new Exception > > > (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType + "." + > > > System.Reflection.MethodBase.GetCurrentMethod().Name, ex); > > > } > > > } > > > } > > > > ---------------------- > > > > public class Entity2 Mapping : ClassMap < Entity2 > > > > { > > > > //public virtual int Shm_medinaid { get; set; } > > > //public virtual int Shm_sherutid { get; set; } > > > > public Entity2Mapping() > > > { > > > try > > > { > > > LazyLoad(); > > > > Table("tableSource2"); > > > > Id(x => x.ID).Length(10).Column("RECID"); > > > > Map(x => x.Col1).Column("COL1"); > > > Map(x => x.Col2).Column("COL2"); > > > > HasMany<Entity3>(x => x.Col_Entity3).AsBag() > > > .KeyColumn("COLUMN_OF_CHILD_TO_JOINBY") > > > .PropertyRef("Col2"); > > > } > > > catch (NHibernate.HibernateException ex) > > > { > > > throw new Exception > > > (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType + "." + > > > System.Reflection.MethodBase.GetCurrentMethod().Name, ex); > > > } > > > > } > > > > } > > > -------------------------------------- > > > > So at my test I am trying to reach the Entity3 > > > > [Test] > > > public void TestMapping() > > > { > > > Entity1 _entity1; > > > > using (ISession Session = > > > NHibernateSessionProvider.GetSession()) > > > { > > > long RECID = 847; > > > > using (NHibernate.ITransaction Tran = > > > Session.BeginTransaction()) > > > { > > > _entity1 = Session.Get< Entity1>(TMD_RECID); > > > > Assert.AreNotEqual(_entity1.Col_Entity2, null); > > > IList<Entity2> _entity2 = new List<Entity2> > > > (_entity1.Col_Entity2); > > > > IList<Entity3> _entity3 = new List<Entity3> > > > (_entity2[0].Col_Entity3); > > > > Assert.AreNotEqual(_entity3[0].Col1, 0); > > > > Tran.Commit(); > > > } > > > } > > > } > > > ----------------------- > > > > I am failing at IList<Entity3> _entity3 = new List<Entity3>(_entity2 > > > [0].Col_Entity3); > > > > Initializing[Entity2#1]-failed to lazily initialize a collection of > > > role: Entity2.Col_Entity3, no session or session was closed > > > NHibernate.LazyInitializationException: Initializing[Entity2#1]- > > > failed to lazily initialize a collection of role: > > > Entity2.Col_Entity3, no session or session was closed > > > at > > > > NHibernate.Collection.AbstractPersistentCollection.ThrowLazyInitializationE > > > xception > > > (String message) > > > > will appreciate any input on the subject . > > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "Fluent NHibernate" group. > > > To post to this group, send email to [email protected]. > > > To unsubscribe from this group, send email to > > > [email protected]<fluent-nhibernate%2Bunsubscr > > > [email protected]> > > > . > > > For more options, visit this group at > > >http://groups.google.com/group/fluent-nhibernate?hl=en. > > > -- > > - Hudsonhttp://www.bestguesstheory.comhttp://twitter.com/HudsonAkridge -- You received this message because you are subscribed to the Google Groups "Fluent NHibernate" 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/fluent-nhibernate?hl=en.
