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

Using extra-lazy for lazy collections


Extra lazy behavior was mentioned in the previous chapter. It is worthwhile to mention two benefits that extra lazy behavior brings to the table.

Suppose you have loaded a bunch of employees from database to be displayed on UI, along with number of benefits that they are entitled to. When you call employee.Benefits.Count() as in the following code, NHibernate would load the Benefits collection into memory and then count the number of items:

var employees = Database.Session.Query<Employee>()
.Where(e => e.ResidentialAddress.City == "London");

foreach (var employee in employees)
{
  Assert.That(employee.Benefits.Count(), Is.GreaterThan(0));
}

But if you enable extra lazy behavior on mapping of the Benefits collection then the preceding code would result in the following SQL being sent to database:

SELECT Count(id)
FROM benefit
WHERE employee_id =@ p0;
@p0 = 11 [TYPE: Int32 (0)]

SELECT Count(id)
FROM benefit
WHERE employee_id =@ p0;
@p0 = 12 [TYPE...