yes, use batch fetching, see the docs on mapping collections for more
help.

On Aug 23, 1:37 pm, rhartzog <[email protected]> wrote:
> So no matter how I slice this one I'll have to loop over the items
> collection?  Is there a way to issue a smaller query to only get the
> value I need instead of loading each of the Item objects?  Right now
> I'll get a single query for the Store and related Shelves, then I get
> (in one particular instance) 27 calls to grab the Items for each of
> the 27 shelves.  Can you expand on how I could possibly reduce the 28
> calls?  Even if there were separate queries, but issued in the same
> call?
>
> On Aug 23, 11:17 am, Jason Meckley <[email protected]> wrote:
>
> > there is not a way to efficiently load this in a single query, you can
> > use batch fetching and/or futures to reduce the number of remote
> > calls.
>
> > On Aug 23, 11:21 am, rhartzog <[email protected]> wrote:
>
> > > I have a structure similar to this example.  On the store detail page
> > > there is a list of the shelves in that store which display a Priced
> > > From value.  I can eagerly load the shelves since I know I will need
> > > them, but to calculate the PricedFrom() it lazy loads the items on
> > > each shelf which is obviously not ideal.  Most of what I have worked
> > > with is pretty straight forward CRUD queries, but this could get ugly
> > > and I would like to learn how to do something more advanced like this.
>
> > > public class Store
> > > {
> > >     public Guid Id { get; set; }
>
> > >     public IList<Shelf> Shelves { get; set; }
>
> > > }
>
> > > public class Shelf
> > > {
> > >     public Guid Id { get; set; }
>
> > >     public Store Store { get; set; }
>
> > >     public IList<Item> Items { get; set; }
>
> > >     public decimal PricedFrom()
> > >     {
> > >         return Items.Min(i => i.Price);
> > >     }
>
> > > }
>
> > > public class Item
> > > {
> > >     public Guid Id { get; set; }
>
> > >     public Shelf { get; set; }
>
> > >     public decimal Price { get; set; }
>
> > > }
>
> > > public class StoreRepository
> > > {
> > >     public Store GetByName(string Name)
> > >     {
> > >         var store= _session.CreateCriteria<Store>()
> > >             .Add(Restrictions.Eq("Name", Name))
> > >             .SetFetchMode("Shelves", FetchMode.Eager)
> > >             .SetResultTransformer(new
> > > NHibernate.Transform.DistinctRootEntityResultTransformer())
> > >             .FutureValue<Store>();
>
> > >         return store.Value;
> > >     }
>
> > > }
>
> > > public StoreService
> > > {
> > >     public StoreDetailVM GetStoreDetails(string Name)
> > >     {
> > >         Store store;
> > >         StoreDetailVM vm;
> > >         using (var tx = _session.BeginTransaction())
> > >         {
> > >             store = _storeRepository.GetByName(Name);
>
> > >             tx.Commit();
> > >         }
>
> > >         return Mapper.Map<Store, StoreDetailVM>(store);
> > >     }
>
> > > }

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