Algunas notas sobre las configuraciones por código en EF 6

Bien, por suerte, ya estoy empezando a ver bastante código con EF 6 y también, como es lógico, estoy viendo como se usan, bien o mal, ciertas piezas que son nuevas en esta versión. Una de las cosas que me llama la atención tiene que ver con DbConfiguration, el nuevo componente que nos permitirá establecer la configuración para todos los contextos de trabajo, y esto es importante hacerlo notar, porque mucha gente entiende esta configuración para una unidad de trabajo en concreto y no como una configuración global.

 

Entity Framework 6 hace una búsqueda en todos los ensamblados del App Domain en busca de una clase que implemente DbConfiguration y entiende que solamente una de estas clases debería existir, avisándonos en caso contrario con una bonita excepción… Por eso, en mi opinión, no es buena práctica que como creadores de una unidad de trabajo establezcamos cual será el DbConfiguration, deberíamos dejar este trabajo para un último término, en nuestro frontal Web, Web API etc… El riesgo que corremos sino seguimos esta práctica es la de caer en la existencia de múltiples objetos de configuración, además, esto que acabamos de proponer tiene más sentido aún sinos damos cuenta de que DbConfiguration es el mecanismo para proporcionar servicios a la infraestructura de EF 6 y por lo tanto si queremos juntarlo con nuestro contenedor de DI deberemos hacerlo lo más cerca de nuestro composition root.

 

Para los escenarios en los que hay múltiples ensamblados con múltiples tipos, la búsqueda de nuestra configuración, lógicamente, puede llevar más tiempo del deseado. Para evitar esto, EF 6 nos permite establecer en nuestra sección del archivo de configuración que elemento en concreto queremos usar:

<entityFramework codeConfigurationType="MyNamespace.MyDbConfiguration, MyAssembly">
</entityFramework>

Otro de los escenarios posibles con el trabajo de DbConfiguration, aunque no es demasiado habitual, consiste en aquel en el que no somos dueños de esta clase de configuración pero queremos establecer nuevas implementaciones de servicios o incluso cambiar algunas de las implementaciones establecidas. Para ello, DbConfiguration nos ofrece un evento, Loaded, en el que nos podemos subscribir y tener acceso a este objeto de configuración como podemos ver a continuación gracias a la clase DbConfigurationEventArgs.

 

Bueno, hasta aquí esta pequeña entrada, espero tener tiempo para escribir de forma más profunda….

 

saludos

Unai

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *