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.
