When you call the List()
method the query will be executed (and load all at once). If it would load the entities as you access them it would cause some potential "Select N+1" queries that could slow your application down a lot and you might not notice it before it's live.
I would say that in most cases you do want the query to be executed when you call the List()
method and instead specify the rows you want in the query. You could, however, use linq to nhibernate and work with the IQueryable interface to limit the result set at a later stage.
Bottom line is that it might sound like a very good idea to load the entities as you access them. But in many cases it will cause some heavy problems (like Select N+1 queries) that can kill your application.
A very good tool to profile nhibernate is nhprof. If you haven't checked it out already I would really recommend it.