Using a virtual keyword for navigation properties is necessary for lazy loading. Using a dynamic keyword for all associated properties is necessary for dynamically tracking changes. All requirements of both options are described in the documentation .
In EF 4.0, dynamic change tracking was recommended, and because of this, the POCO T4 generator used virtual properties, but since EF 4.1 , snapshot change tracking is recommended as an initial option, with switching to dynamic change tracking only if the change tracking is a chapshot a victim of performance issues.
source
share