Question: why does nhibernate require virtual?
Answer: The quick answer to that question is: because we need members to be virtual in order to do our lazy loading magic/voodoo. ... As Andrew said, properties are virtual to trigger lazy loading. Here is an explanation as to why that is: At runtime NHibernate will substitute proxy objects for your real property objects.