Learning NHibernate 4: Explore the full potential of NHibernate to build robust data access code