Como no podía ser menos, tenemos novedades en Entity Framework Core de la mano de la preview 3. Además de correcciones de bugs, se ha lanzado una plantilla inicial para Scaffolding en database-first. Por otro lado, muchas mejoras de rendimiento y optimizaciones en el código generado que se ejecuta finalmente en el servidor SQL.
Pre-requisitos
- EF7 se dirige actualmente a .NET 6. Es probable que esto se actualice a .NET 7 a medida que nos acerquemos a la versión.
- EF7 no se ejecutará en .NET Framework.
How to get EF7 previews
EF7 se distribuye exclusivamente como un conjunto de paquetes NuGet. Por ejemplo, para agregar el proveedor de SQL Server al proyecto, puede usar el siguiente comando mediante la herramienta dotnet:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer –version 7.0.0-preview.3.22175.1 |
En la tabla siguiente se enlaza con la versión preliminar 3 de los paquetes EF Core y se describe para qué se utilizan.
Package | Propósito |
Microsoft.EntityFrameworkCore | El paquete principal de EF Core que es independiente de proveedores de bases de datos específicos |
Microsoft.EntityFrameworkCore.SqlServer | Database provider for Microsoft SQL Server and SQL Azure |
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite | Compatibilidad de SQL Server con tipos espaciales |
Microsoft.EntityFrameworkCore.Sqlite | Proveedor de base de datos para SQLite que incluye el binario nativo para el motor de base de datos |
Microsoft.EntityFrameworkCore.Sqlite.Core | Proveedor de base de datos para SQLite sin un binario nativo empaquetado |
Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite | Compatibilidad con SQLite para tipos espaciales |
Microsoft.EntityFrameworkCore.Cosmos | Proveedor de base de datos para Azure Cosmos DB |
Microsoft.EntityFrameworkCore.InMemory | El proveedor de base de datos en memoria |
Microsoft.EntityFrameworkCore.Tools | Comandos de EF Core PowerShell para la consola del Administrador de paquetes de Visual Studio; Utilice esto para integrar herramientas como andamios y migraciones con Visual Studio |
Microsoft.EntityFrameworkCore.Design | Componentes compartidos en tiempo de diseño para las herramientas de EF Core |
Microsoft.EntityFrameworkCore.Proxies | Proxies de carga diferida y seguimiento de cambios |
Microsoft.EntityFrameworkCore.Abstractions | Abstracciones desacopladas de EF Core; Utilice esta opción para funciones como anotaciones de datos extendidas definidas por EF Core |
Microsoft.EntityFrameworkCore.Relational | Componentes principales de EF compartidos para proveedores de bases de datos relacionales |
Microsoft.EntityFrameworkCore.Analyzers | Analizadores de C# para EF Core |
Instalación de la interfaz de línea de comandos (CLI) de EF7
Antes de poder ejecutar la migración de EF7 Core o los comandos de scaffolding, debemos instalar el paquete cli como una herramienta global o local.
dotnet tool install --global dotnet-ef --version 7.0.0-preview.3.22175.1
Si ya tiene instalada la herramienta, puede actualizarla con el siguiente comando:
dotnet tool update --global dotnet-ef --version 7.0.0-preview.3.22175.1
Mejoras en el pipeline de actualizaciones
Pueden ver las mejoras realmente notorias sobre este tema dese los siguientes links:
- Improve SQL Server insertion logic (also make RETURNING the default INSERT strategy for retrieving db-generated values for other providers).
- Use RETURNING/OUTPUT clause for UPDATE/DELETE
- Refactor ReaderModificationCommandBatch
- Reimplement MaxBatchSize as a pre-check
Tomando el control del DBContext
La vista previa se agr4ega la capacidad de controlar cómo EF7 realizar ingeniería inversa o clases de Scaffolding para proyectos basados en bases de datos utilizando plantillas T4. ¿Prefieres los setters «null bang»? ¿Inicializadores de propiedades? ¿Inicialización del constructor? Todas estas personalizaciones ahora son posibles. De hecho, no está limitado a generar las clases «tradicionales» dbContext y entity. Todo es posible, incluido el uso de las plantillas para generar documentación.
Podemos ver en detalle est funcionalidad en el video de la comunidad La mejor manera de aprender sobre esta nueva característica es ver nuestro reciente standup de la comunidad: Database-first con plantillas T4 en EF7. Además de generar código personalizado, la demostración muestra cómo crear una reducción de marca utilizando la sintaxis de Mermaid para generar diagramas ERD.
```mermaid
erDiagram
ORDERMASTER ||--o{ ORDERDETAIL : owns
ORDERDETAIL ||--|{ LINE-ITEM : contains
ORDERMASTER }|..|{ CUSTOMER : uses
```
Conclusiones
Entity framework no para de sorprenderme. Siempre me pregunto ¿qué nueva funcionalidad se les ocurrirá ahora? y siempre me llevo una sorpresa con cada nueva versión de este. En futuros post veremos más en detalle qué cosas nuevas tiene este gran ORM.