I have an entity model along the lines of the following:
public class Registration
{
public virtual int Id { get; set; }
public virtual DateTime Start { get; set; }
public virtual DateTime End { get; set; }
public virtual IList<Person> People { get; set; }
}
public class Person
{
public virtual int Id { get; set; }
public virtual Registration Registration { get; set; }
public virtual string Name { get; set; }
public virtual Location Location { get; set; }
}
public class Location
{
public virtual int Id { get; set; }
public virtual string Description { get; set; }
}
Currently, the Registration.People collection is lazy loaded, and the
Person.Location property is fetched with a join when loading a Person
entity.
I have a view that needs to load all registration entities on a particular
day. I have created the query easily enough and it returns the expected
results:
DateTime theDate = DateTime.Today;
Session.Query<Registration>()
.Where(r => (theDate < r.Start || today <= r.End))
.OrderBy(r => r.Start)
.ToList();
However with my existing model, NHibernate issues a query to fetch the
Registration entities, then* for each Registration found*, issues another
query to fetch the Person entities. While this certainly works, it results
in a lot of queries if there are a lot of Registration records on a
particular day.
I'm wondering if there is a more efficient way to fetch the child records?
For example, if I were stuck using ADO.NET and building my queries by hand,
I might query all the Registration records, collect the Ids of the returned
entities, then issue a single query for Person entities with Registration
Ids in the collection, then map the Person entities back to the appropriate
Registration record. I've looked at Futures and eager fetching the
children, but those produced ugly results (like Cartesian result sets,
etc.). Can I accomplish something similar with NHibernate?
TIA,
Steve
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.