I already tried to explain this before, but here's a simple example from a presentation i recently did on NHibernate:

As you can see, only the properties of associations that are eligible for lazy-loading are virtual in this piece of code, because that is what many people seem to want. There are actually 2 different ways in which this can cause problems... can you spot both problems?
Pingback: Must Everything Be Virtual With NHibernate, Part III | The Inquisitive Coder – Davy Brion’s Blog