Book Image

Learning NHibernate 4

Book Image

Learning NHibernate 4

Overview of this book

Table of Contents (18 chapters)
Learning NHibernate 4
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Avoiding eager fetching


While eager fetching of collections looks like a simple and quick solution to select N+1 problem, it does introduce an issue. Since eager fetching uses left outer joins, it results in Cartesian product of matching row in root table and collection table. Following unit test illustrates this behavior. We have three employees stored in-memory database. All three employees live in London. Two of the three employees are members of a community and the third employee is member of two communities. The query in the following unit test loads all employees living in London and also eagerly fetches their Communities collection. I expect to get three employee instance back.

[Test]
public void QueryOver()
{
  using (var transaction = Database.Session.BeginTransaction())
  {
    Address residentialAddress = null;
    var employees = Database.Session.QueryOver<Employee>()
            .JoinAlias(e => e.ResidentialAddress, 
            () => residentialAddress)
        ...