One option would be to use ISession.Load, since it will return a proxy (if you have lazy loading enabled) that will not hit the database when your entity is not present in the session. If you access any properties of that object, it will then be loaded transparently.
Your process would then be as follows:
- Fetch the primary key from your select list.
- Call ISession.Load(typeof(Customer), primaryKey)
- Now, when/if you access properties of that customer proxy, it will be loaded from the database without any interaction from you.
Note that your nhibernate session must be left open for this lazy loading proxy behavior to work properly.