miércoles, 14 de mayo de 2014

Entity Framework Tooling, herramientas para mejorar nuestra productividad!

Hola amigos, para ir terminando con esta serie de post sobre Entity Framework quiero recomendarles un par de herramientas que son bastante útiles para mejorar nuestra productividad y para hacer nuestra labor un poco más fácil. En un artículo anterior ya habíamos visto por ejemplo los Entity Framework Power Tools que nos ayuda bastante con el trabajo en el enfoque Code First, y también vimos que en el último build de Microsoft se presentó por llamarlo así un nuevo enfoque "Code Second" en el cual podemos Generar nuestras clases Poco como en Code first pero esta vez generándolas a partir de nuestra base de datos.

Entity Framework Profiler

Bueno entrando en materia la primer herramienta de la que les quiero hablar es de Entity Framework Profiler, que es una herramienta licenciada que nos permite observar en tiempo real las consultas sql o Transact Sql que genera Entity Framework para comunicarse con la base de datos, ya que como vimos en artículos anteriores EF genera estas sentencias a partir de nuestras consultas linq. Ahora veamos cómo se usa:

Lo primero que debemos hacer es descargar el .zip en el cual se encuentran dlls, ejecutable y demás archivos necesarios para el funcionamiento de la herramienta, de la siguiente url: http://www.hibernatingrhinos.com/products/efprof


Una vez tengamos el zip, debemos referenciar en nuestra aplicación la dll HibernatingRhinos.Profiler.Appender.dll y debemos escribir la siguiente instrucción en el evento en dónde inicia nuestra página, cómo en nuestro caso utilizaremos una aplicación de consola lo haremos en el método main de la siguiente forma:

        static void Main(string[] args)
        {
            HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();
            using (var prodcutosContext = new ProdcutosContext())
            {
                var productos = prodcutosContext.Productos;
                var p = productos.ToList();
            }
        }

De esta forma inicializamos el profiler para que haga depuración de las sentencias linq. Ahora solo debemos ejecutar la aplicación EFProf que se encuentra también en él .zip que descargamos, y debemos activar nuestra licencia trial o paga si la tenemos y veremos la siguiente pantalla:


Ahora solo debemos ejecutar nuestra aplicación con EFProf ejecutando y veremos una traza de todas las sentencias sql que Entity Framework ha creado por nosotros:


Genial, a través de esta herramienta podemos hacer múltiples análisis de nuestra consultas, para poder optimizarlas si es el caso, o encontrar problemas que se nos presenten, adicional podemos ver alertas con respecto a las consultas, la verdad es que es una herramienta sumamente útil. Solo les dejo un abre bocas de lo que es pero los invito a seguir investigando acerca de ella ya que aunque es paga se le puede sacar muy buen provecho. Una alternativa integrada ya con Visual Studio para ver las sentencias Sql ejecutadas puede ser observar el IntelliTrace de depuración el cual nos muestra las sentencias paso a paso:


Bueno y que tal si a través de alguna de estas dos herramientas descubrimos algún problema de rendimiento que deseemos mejorar en nuestras consultas o alguna posibilidad de mejora? y logramos optimizar la consulta como lo deseamos, ¿No sería muy útil poder convertir esta consulta Sql optimizada en una consulta Linq? a mi juicio si lo es, ya que llevamos la optimización al lenguaje de consulta utilizado por Entity Framework, y en esta labor nos puede ayudar la siguiente herramienta que les quiero mostrar: Linquer

Linquer

Linquer es una herramienta que nos permite convertir sentencias Transact Sql en instrucciones Linq, y que soporta los lenguajes c# y vb, bastante útil para aprender linq, si ya tienes dominio de Transact Sql, al igual que Entity Framework Profiler, tiene una versión de pago y otra trial, y la podemos descargar del siguiente link: http://www.sqltolinq.com/downloads

Una vez instalado podremos conectarnos a nuestro contexto a través de la herramienta para convertir de Sql a linq, como vemos a continuación:


Y para terminar quiero compartirles esta última herramienta:

LinqPad

LinqPad es una herramienta que nos permite realizar consultas Linq directamente contra nuestra base de datos, sin tener que ejecutar nuestra aplicación para ver qué resultados arrojará nuestra sentencia en tiempo de ejecución, a través de esta herramienta podemos escribir consultas linq en leguajes como c#, vb y f# además de poder escribir sentencias en Transact Sql. adicional podemos ver la sentencia Sql que genera la consulta linq que ejecutemos. Veamos un poco de cómo funciona:

Lo primero que debemos hacer es descargar e instalar la herramienta del siguiente link: https://www.linqpad.net/

Posteriormente podemos agregar nuestra conexión a la base de datos o a un contexto de EF directamente si lo deseamos:

Para esto especificamos una cadena de conexión:


Y enseguida veremos las tablas de nuestra base de datos, sobre la cual podemos ejecutar sentencias linq directamente, tal como se muestra a continuación:


Y adicional si seleccionamos la opción de resultados Sql, podremos ver la sentencia Transact Sql que generó esta consulta linq:


Muy útiles estas herramientas para mejorar nuestra productividad a la hora de trabajar con Entity Framework, que otras herramientas conoces?

Bueno amigos eso es todo de esta muestra de tooling o herramientas para facilitar nuestro trabajo en Entity Framework, espero les sea de utilidad y de interés. Y no duden en compartirlo.

Saludos, y buena suerte!

7 comentarios:

  1. Muy bueno post, y bastante útil, quisiera recalcar el tema del profiler, es que muestras http://www.hibernatingrhinos.com/products/efprof es un producto de una de las personas que en mi opinión más conocen sobre EF en el mundo, un verdadero crack, y la tool es muy muy buena, vale la pena comprarla, sin embargo, también es posible usar el profiler de SQL Server para que ver que está haciendo el ORM, y algo importante, es bueno saber lo que hace y pasarlo al SQL Server para ver su plan de ejecución y posibles mejoras, para que los querys sean muchos más rápidos.

    Saludos.

    ResponderEliminar
    Respuestas
    1. Hola Julito, muchas gracias por tu comentario, la verdad aporta mucho a este post, como dices es una gran alternativa usar el Sql server profiler, adicional de la que dí de usar Intelli Trace, que buena herramienta, aquí les dejo una link para que vean como se usa.

      Saludos julio y gracias!

      Eliminar
    2. http://www.techrepublic.com/article/step-by-step-an-introduction-to-sql-server-profiler/#.

      Eliminar
  2. Primero que todo felicitarte por este Post.

    Como segundo, A partir de la versión 6.X, EF nos proporciona Interception/SQL logging, lo que de una u otra forma nos ayuda a obviar el tema de Entity Framework Profiler.

    Para saber más de Interception/SQL logging ver el sgte link: https://entityframework.codeplex.com/wikipage?title=specs

    ResponderEliminar
    Respuestas
    1. Hola amigo, muchas gracias por leerme y por tan valioso aporte, ayuda mucho a enriquecer el artículo para que todos podamos conocer nuevas herramientas.

      muchas gracias y saludos!

      Eliminar
  3. Quizas he llegado muy tarde a este post, pero quiero decir que hay consultas complejas en las cuales estos programas truenan, por ejemplo:
    Select max(substring(strField,3,2)) as codigo From strTabla Where strCondicion ='01'
    Si hago esto directamente en sql funciona, pero no cuando se convierte a linq; ¿Donde puedo encontrar informacion sobre consultas complejas?, este es mi correo: e2mch@outlook.com, por cualquier info que ya tengan y quieran compartirla; Saludos y Gracias.

    ResponderEliminar
    Respuestas
    1. Hola amigo, y cuál fue la consulta que te generó en linquer? si la compartes te puedo ayudar a ver cual es el problema, sin embargo esa consulta no la veo tan compleja, pienso que el tema puede ser más por tipos de datos, por el SubString ya que en linq tendrías que hacer una serie de casteos para que no falle por tipos.

      Eliminar