Like This!

Cuando se usa EntityFramework (EF) en desarrollos .Net, lo que se logra es un manejo muy eficiente y sin código SQL del acceso a datos, sin importar qué fuente sea (SQL, Oracle, ODBC). Se modela la fuente de datos en objetos relacionados y fuertemente tipados, se crean métodos de acceso a esos datos y unas propiedades de navegación. Éstas últimas son las que más confusión causan.

Algun sector cree que esto hace del EntityFramework un modelo de trabajo soso, lento, ineficiente y de altas demandas de recursos. Pero no es así.

Existe una variable del contexto de datos que genera EF llamada LazyLoadingEnabled que le indica al contexto de datos de qué forma debe cargar las propiedades de Navegación. Primero explicaré cómo funcionan y luego indico cómo debe usarse esta variable.

Cuando el EntityFramework modela la fuente de datos no lo hace uno a uno como se hacía hasta hace un tiempo. EF genera unas entidades más versátiles y optimizadas para brindar acceso a los datos relacionados desde un único punto como se muestra en la siguiente imagen de una clase generada por EF.

Entidad EF

Entidad de una tabla país generada por EF

En la imagen anterior vemos claramente que desde la clase País tenemos acceso a Usuario, que es una coleccion de objetos Usuario que contiene a todos los usuario del páis con que se ha instanciado la clase.

La preocupación es obvia: Si mi objeto País tiene una colección de usuarios, su tamaño es grande, el tiempo de carga es grande, la transmisión es lenta y su manejo es complicado. Aquí entra a funcionar la variable de contexto LazyLoadingEnabled.

Si ponemos esa variable en true, el EF va a cargar todas las propiedades de navegación en el momento en que carga los datos básicos de la entidad; si la ponemos el false, sólo se traerán los datos referentes a la tabla País de la fuente de datos. Con esta última opción es que logramos un manejo eficiente y ágil de nuestra aplicación. Debemos por tanto, cargar las variables de operación al momento de necesitarlas. Hay que tener en cuenta que por defecto el EF 4.0 está usando true. Algo que no sucedía en versiones anteriores del EF.

Total, cuando el EF dice LazyLoadingEnabled, no es la pereza del EF sino la pereza del programador.