What effect(s) can the virtual keyword have in Entity Framework 4.1 POCO Code First?

So far, I know of these effects.

  • Lazy Loading: Any virtual ICollections will be lazy-loaded unless you specifically mark them otherwise.
  • More efficient change tracking. If you meet all the following requirements then your change tracking can use a more efficient method by hooking your virtual properties. From the link:

    To get change tracking proxies, the
    basic rule is that your class must be
    public, non-abstract or non-sealed.
    Your class must also implement public
    virtual getters/setters for all
    properties that are persisted.
    Finally, you must declare collection
    based relationship navigation
    properties as ICollection<T> only.
    They cannot be a concrete
    implementation or another interface
    that derives from ICollection<T> (a
    difference from the Deferred Loading
    proxy)

Another useful link describing this is MSDN’s Requirements for Creating POCO Proxies.

Leave a Comment