There are two properties that control the ability to lazy load navigation properties:LazyLoadingEnabled
: controls whether navigation properties marked as virtual will be lazy loaded, that is, loaded on demand when they are accessed;ProxyCreationEnabled
: Entity Framework will create dynamic proxy classes for unsealed types with virtual properties, whenever it loads an instance from the database or it is asked to create an instance (Create
The problem is: for the most cases, we need both properties to be true
. If they are not, navigation properties are only loaded if:Eagerly loaded through the Include
extension method;Explicitly loaded
through the Load
method (collections only).
There are cases, however, when you wouldn’t want to have proxies:When exposing entities through WCF, because since it knows nothing about the dynamic generated proxy types;When using, for example, AutoMapper
, to convert from one type to another, for the same reason.
The one reason why you would want a proxy without lazy loading is for self-tracking changes, that is, the proxy detects changes made to it instead of having the DbChangeTracker
class (the DbContext.ChangeTracker
property) doing it....(Read whole news on source site)