EF 4.0 Performance Tips #6

Ya llevamos unos cuantos tips de rendimiento con Entity Framework, por ahora la mayoría se basaban en aspéctos técnicos simplemente, materialización de consultas, consultas parametrizadas, vistas precompiladas etc… En este tip haremos algo distinto, nos centraremos más en como hacemos nuestros modelos de entidades, intentando balancear entre la práctica y las bondades de un diseño de dominio correcto.

Tanto las antiguas como las nuevas capacidades de modelado nos permiten solventar la impedancia de nuestros dominios con respecto a los esquemas relacionales con nuestra base de datos, pero muchas veces estos modelos contienen mucha profundidad de jerarquía y un gran cantidad de relaciones, de forma especial cuando la herencia es TPC-Style.

Lo mejor, como siempre digo, es poner un ejemplo. Imaginaros que partimos del siguiente modelo EDM sobre el cual vamos a ir realizando diferentes acciones para crear un modelo más adaptado a nuestro lenguaje.

Untitled

En este modelo se definen las entidades Producto,Software, Audio, Ebook y Video sobre las que vamos a trabajar y, empezar por ejemplo, a crear nuestra herencia de entidades, disponiendo de un solo root Producto.

 

Untitled2

 

Desde luego este modelo es mucho más comprensible desde el punto de vista de un desarrollador orientado a objetos y seguramente tendrá más sentido para un dominio concreto en el que se encuentre, pero escenarios de modelado como este también suelen producir consultas excesivamente complejas que deberíamos analizar con criterio. Si por ejemplo dado este mecanismo de herencia TPC, pidiéramos por ejemplo una lista de productos, tendríamos que valorar realmente que es lo que estamos solicitando, y esto no es más claro, que la unión de todas las entidades dentro de la jerarquía. Casi prefiero no pegar la sentencia SQL porque alargaría inútilmente el texto de esto post, pero os aseguro que es una delicia verlo pasar en el profiler, y lo ves pasar durante un rato :-).

Después de todo esto, entonces, cual es el corolario que nos queda para este tip??? pues muy sencillo, valorar los modelos de EDM y comprobar la simplicidad o no de las consultas que se generan. Si aún así deseas primar tus modelos de dominio, algo más que aceptable, puedes solventar problemas de consultas por medio de llamadas a ls nuevos métodos de los contextos de trabajo que te permiten escribir directamente el SQL de turno o bien usar procedimientos almacenados ( buff, he dicho yo esto, lo retiro)

 

Saludos

Unai