Cómo no romper los límites, cómo crear una buena arquitectura y cómo hacer un buen mantenimiento

Actualización masiva de datos en Entity Framework 7

Uno de los problemas históricos que teníamos en Entity Framework era la edición masiva de datos, o el borrado masivo de éstos. Era necesario recurrir a soluciones externas, como la utilización de operaciones Bulk a través de métodos de extensión en librerías externas o la creación de un procedimiento almacenado, ya que el rendimiento que ofrecía el propio Entitty Framework dejaba mucho que desear.

Como os habréis dado cuenta, en la frase anterior he escrito en pasado. Sí, en pasado, porque este problema se ha solucionado. Ahora Entity Framework, a partir de la versión 7, nos ofrece una solución para hacer esta edición/borrado masivo sin tener que hacer un gran sacrificio de rendimiento. Esta solución pasa por la utilización de los métodos ExecuteUpdateAsync y ExecuteDeleteAsync que se encuentra en la clase DbContext.

El método ExecuteUpdateAsync utiliza una expresión lambda para especificar las entidades que se van a actualizar y otra expresión lambda adicional para especificar las propiedades de las entidades van a ser modificadas. Estas expresiones se utilizan para generar una sola consulta de actualización que modifica todas las entidades seleccionadas.

A diferencia de UpdateRange, que actualiza todas las propiedades de las entidades seleccionadas, ExecuteUpdateAsync permite indicar las propiedades específicas que se deben actualizar, lo que puede reducir el tiempo de ejecución y mejorar el rendimiento.

Para explicar el funcionamiento, he creado una pequeña aplicación de consola en la que tengo una base de datos con una tabla, en la que inserto 1.000.000 de registros. Una vez insertados, modifico 500.000 de esos registros, los cuales cumplen una condición. Tras haberlos modificado, elimino esos 500.000 que habían sido modificados.

He realizado estás operaciones de la manera «antigua» y la nueva, utilizando los métodos explicados. Y he medido el tiempo empleado por cada opción. Os invito a que visitéis mi blog, y allí veáis los métodos que he creado para actualizar y eliminar registros 👉Actualización masiva de datos en EF 7 – Jorge Diego Crespo (wordpress.com)

Si entramos a analizar el rendimiento obtenemos los resultados que muestro en la siguiente tabla. Obviamente, estos tiempos varían en función de la máquina en la que ejecutéis el código, el estado de ésta…

Tabla comparativa de tiempos empleados en actualización/borrado masivo

Basándonos en los resultados arrojados, podemos concluir que la mejora es más que notable. Por lo tanto, en este tipo de actualizaciones, no sería necesario recurrir a librerías externas o al uso de procedimientos almacenados.

Por último, cabe destacar que estos métodos requieren un proveedor de base de datos compatible, que admita consultas de actualización en lote, como SQL Server o PostgreSQL.

mm

Sobre Jorge Diego

Soy un apasionado del desarrollo de software. Me encanta mi trabajo y mantenerme al día haciendo cursos, investigando, realizando proyectos personales, etc. Principalmente trabajo con tecnología .NET. Asimismo, me interesa muchísimo el mundo de la productividad personal. Además del desarrollo tengo otras muchas aficiones: viajar, deporte, gastronomía, fotografía…y sobre todo, pasar tiempo con mi familia.
Esta entrada ha sido publicada en .NET. Enlace permanente.
ENCAMINA, piensa en colores