CompositeID - 1).Doesn't seem to handle collections. 2).Doesn't have AddPropertyKey(x=>x.Col2) - it has KeyProperty . 3).We want to have HasManyToMany relationships . Thanks for your reply nevertheless. Maybe I don't get something. Can you supply some sample ?
On Jan 25, 10:02 am, Gregory Kaidanov <[email protected]> wrote: > 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 > > ... > > read more » -- 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.
