Entity Framework y Linq
desarrolladores de paginas web
y hablado de algunas de sus virtudes, vamos a profundizar un poco en Entity Framework y Linq, el primer ORM de los que vamos a analizar en esta serie de artículos.Diferentes ORM. Entity Framework y Linq
Entity Framework (EF) es la solución open-source que ofrece Microsoft para un ORM en las aplicaciones .NET. Este framework permite a los desarrolladores convertir sus estructuras de datos en clases para poder trabajar con esa información usando objetos de .NET, reduciendo considerablemente la cantidad de código que sería necesario para realizar las tareas de acceso y gestión de datos en nuestra aplicación.
Estas son algunas de las características más interesantes de EF
-
Cross-platform: EF Core es un framework que funciona libremente en Windows, Linux y Mac.
-
Modelado: EF genera un EDM (Entity Data Model o Modelo de Datos de Entidad) con entidades de distintos tipos de datos, los cuales podemos asignar o recuperar (get y set). Estos modelos son lo utilizados para realizar las consultas y persistencia en base de datos.
-
Transacciones: EF usa transacciones por defecto al realizar consultas a la base de datos. Adicionalmente permite modificar la gestión de transacciones en caso de necesitar algo más específico.
-
Cache: EF incluye una cache que previene sobrecargas de la base de datos en caso de recibir una misma consulta numerosas veces.
-
Configuración: EF permite ajustar los modelos generados añadiendo Data Annotations para sobreescribir el comportamiento por defecto.
-
Migraciones: EF incluye comandos para generar y ejecutar migraciones, para modificar el esquema de la base de datos.
-
Consultas: EF permite usar consultas LINQ como opción alternativa para consulta de datos. El gestor de la base de datos se encargará de traducir las consultas LINQ al lenguaje con que trabaje nuestra base de datos (SQL por ejemplo). Por último, EF también permite ejecutar consultas nativas o “raw” directamente.
Hemos hablado en las características de Entity Framework de las consultas LINQ, y ese va a ser nuestro siguiente punto de análisis.
LINQ o Language Integrated Query, es un conjunto de herramientas de Microsoft para realizar todo tipo de consultas sobre distintas fuentes de datos (objetos, bases de datos, etc) utilizando para ello distintas funciones propias para unificar las operaciones comunes en todos los entornos.
LINQ utiliza una sintaxis similar a la utilizada en SQL, aprovechando la ventaja de disponer de .NET y Visual Studio a la hora de codificar. Aquí tenemos un ejemplo muy simple:
Como podemos ver, aparte de un lenguaje similar a SQL, al final de la consulta tenemos la ejecución de la consulta mediante un método propio de LINQ, en este caso FirstOrDefault
Existen distintas alternativas para ejecutar las consultas en nuestra aplicación según nuestras necesidades, como son: First, FirstOrDefault, Single, SingleOrDefault, ToList, etc..
El punto de interés es que hasta no utilizar una de estas funciones, la consulta no es lanzada a la base de datos, lo cual es una funcionalidad que saber cuando utilizar para que sea algo favorable y no algo que perjudique al rendimiento de nuestra aplicación
Como es común en múltiples tecnologías actuales, las consultas que escribimos utilizando LINQ tienen la opción de ser replicadas como funciones lambda, lo cual nos facilita la tarea de simplificar y hacer más legible nuestro código.
Pero en este caso, aparte de simplificar el código, las funciones lambda ofrecen una sintaxis algo diferente para operaciones como Join o Group By, haciedo que para alguna de estas operaciones nos sea más atractivo utilizar LINQ básico o su respectiva función lambda.
Por ejemplo, a modo de opinión personal, es más cómodo realizar la operación Join con LINQ básico, mientras que la operación Group By es más simple realizarla con una función lambda.
Como podemos ver, ambas formas de escribir las consultas nos permiten realizar todas las operaciones, pero es posible que en alguna ocasión, debido a la complejidad del desarrollo que estemos realizando, sea más simple usar una o la otra.
Y hasta aquí esta pequeña introducción a LINQ como ORM en aplicaciones de .NET. En el siguiente post de esta sección cambiaremos a Eloquent, el ORM de Laravel que utilizamos en los proyectos PHP, para poder ver diferencias y similitudes entre ambas tecnologías.