Book Image

NHibernate 3 Beginner's Guide

By : Dr. Gabriel Nicolas Schenker, Aaron Cure
Book Image

NHibernate 3 Beginner's Guide

By: Dr. Gabriel Nicolas Schenker, Aaron Cure

Overview of this book

<p>Ideally, we would want to persist the objects our application uses and produces AS IS, without having to first transform them in complex ways. NHibernate is a framework that provides us with an object-oriented access to a relational database without having to write SQL and with little or no database-specific data access code. Definitely, if you are a .NET developer, knowing more about NHibernate will simplify and reduce your efforts in developing .Net applications.<em>NHibernate 3 Beginner's Guide</em> introduces Nhibernate with step-by-step examples, and is the easiest way to learn about bridging the gap between object-oriented .NET applications and the relational database that stores the application's data. It is a beginner's guide to NHibernate that starts from scratch. Successive chapters build upon earlier concepts, while the sample code presents various ways to accomplish typical data access tasks.</p> <p><em>NHibernate 3 Beginner's Guide</em> examines all of the topics required to get a functional data access layer implemented while writing the least amount of code possible, presenting options along the way to handle particular edge cases or situations as they arise. The book begins with an introduction to NHIbernate 3 and then moves on to creating the development environment. Then it teaches you how to create a model, define a database schema, and map the model to the database then covers sessions and transactions. This is succeeded by testing, profiling, and configuration, validation of data and writing queries. Finally, we wrap up with notes on the common pitfalls that you should avoid.</p> <p>Once you complete reading the book, you will have gained the skills and knowledge to incorporate NHibernate into your own applications.</p>
Table of Contents (19 chapters)
NHibernate 3 Beginner's Guide
Credits
About the Authors
About the Reviewers
www.PacktPub.com
Preface
Index

Eager loading versus lazy loading


Let's assume we have the following simple domain with a Person entity that has a set of Hobby entities, as shown in the following screenshot:

If we have stored, for example, three person entities in the database and we execute the following code snippet:

var listOfPersons = session.Query<Person>();
foreach (var person in listOfPersons)
{
  Console.WriteLine("{0} {1}", person.LastName, person.FirstName);
  foreach (var hobby in person.Hobbies)
  {
    Console.WriteLine("  {0}", hobby.Name);
  }
}

Then the result in the NHibernate profiler will look similar to the following screenshot:

This is a typical select (n+1) problem. NHibernate first loads the list of all person and then when we access the hobbies of each person, it lazy loads its respective list of hobbies. In many circumstances, this might be the desired behavior, specifically if we know that we only want to access properties of the person entity but not its hobbies, or if we only want to access...