With a Bag or a List you don't need the entire list because you are not guaranteeing that there will be no duplicates. So NH can add items to the collection without loading them, until you enumerate it. With a Set however, uniqueness must be verified and therefore even adds must load the entire collection.
Hope that helps.. On Mon, Feb 22, 2010 at 12:14 PM, cliff vaughn <[email protected]>wrote: > Diego, > > I'm a little confused by your answer, because the NHibernate docs say this: > > 14.1.3. Bags and lists are the most efficient inverse collections > > Just before you ditch bags forever, there is a particular case in which > bags (and also lists) are much more performant than sets. For a collection > with inverse="true" (the standard bidirectional one-to-many relationship > idiom, for example) we can add elements to a bag or list without needing to > initialize (fetch) the bag elements! This is because IList.Add() or > IList.AddRange() must always succeed for a bag or IList (unlike a Set). > This can make the following common code much faster. > > Parent p = (Parent) sess.Load(typeof(Parent), id); > Child c = new Child(); > c.Parent = p; > p.Children.Add(c); //no need to fetch the collection! > sess.Flush(); > > > Which of you is correct? > > thanks > > cliff > > > On Mon, Feb 22, 2010 at 10:46 PM, Diego Mijelshon > <[email protected]>wrote: > >> If you access the collection, it WILL be loaded (otherwise, the in-memory >> model would have an inconsistency) >> With one-to-many+many-to-one on the other side, it's easy to do, you just >> create the relationship on the other side (the one that has many-to-one. >> With many-to-many, well, you could choose the side that has less elements >> to work from, or refactor the relationship into two one-to-many collections >> with an intermediate entity, so you can just create instances of that >> entity. >> In any case... you should do these things ONLY if you are experiencing >> perfomance problems because of the collection load. Are you? >> >> Diego >> >> >> >> On Mon, Feb 22, 2010 at 13:53, Jonathan Curtis < >> [email protected]> wrote: >> >>> We have a entity with a many-to-many collection mapped as a lazy >>> loaded bag. When we load up the entity, the collection is not loaded - >>> great. Now we want to add a new entity to that collection. As soon as >>> we do this, the collection is loaded up. >>> >>> How do we add the new entity without loading up the whole collection >>> (the collection is large)? >>> >>> -- >>> 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. >>> >>> >> -- >> 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. >> > > > > -- > thanks > > cliff > > -- > 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. > -- 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.
