Leer en inglés

Compartir a través de


Plan para Entity Framework Core 6.0

Importante

Se ha publicado EF Core 6.0. Esta página permanece como un registro histórico del plan.

Como se describe en el proceso de planeamiento de , hemos recopilado información de las partes interesadas en un plan para la versión 6.0 de Entity Framework Core (EF Core). Este plan se actualiza periódicamente para reflejar los ajustes de programación y ámbito.

A diferencia de las versiones anteriores, este plan no intenta cubrir todo el trabajo de la versión 6.0. En su lugar, indica dónde y cómo pretendemos invertir en esta versión, pero con flexibilidad para ajustar el ámbito o extraer el nuevo trabajo a medida que recopilamos comentarios y aprendemos mientras trabajamos en la versión.

Importante

Este plan no es un compromiso. Es un punto de partida que evolucionará a medida que aprendemos más. Algunas cosas que no están planificadas actualmente para la versión 6.0 pueden incorporarse. Algunas cosas actualmente planeadas para la versión 6.0 podrían quedar fuera.

Información general

Número de versión y fecha de lanzamiento

EF Core 6.0 es la próxima versión después de EF Core 5.0 y actualmente está programada para su lanzamiento en noviembre de 2021 al mismo tiempo que .NET 6.

Plataformas compatibles

EF Core 6.0 requiere .NET 6. EF Core 6.0 no tiene como destino ninguna versión de .NET Standard; para obtener más información, consulte el futuro de .NET Standard.

EF Core 6.0 no se ejecutará en .NET Framework.

EF Core 6.0 se alineará con .NET 6 como una versión de soporte técnico a largo plazo (LTS).

Cambios importantes

EF Core 6.0 contendrá un pequeño número de cambios importantes a medida que EF Core y la plataforma .NET sigan evolucionando. Nuestro objetivo es permitir que la gran mayoría de las aplicaciones se actualicen sin interrumpir.

Temas

Las siguientes áreas formarán la base de las grandes inversiones en EF Core 6.0.

Características muy solicitadas

Como siempre, una entrada importante del proceso de planificación procede de la votación (👍) de características en GitHub. Para EF Core 6.0, tenemos previsto trabajar en las siguientes características muy solicitadas:

Tablas temporales de SQL Server

Número de seguimiento: 4693

Estado: Completado

Tamaño de camiseta: Grande

Las tablas temporales admiten consultas para los datos almacenados en la tabla en cualquier momento dado, en lugar de solo los datos más recientes almacenados como es el caso de las tablas normales. EF Core 6.0 permitirá crear tablas temporales a través de migraciones, así como permitir el acceso a los datos a través de consultas LINQ.

Inicialmente, el ámbito de este trabajo se limita como se describe en la incidencia. Es posible que añadamos soporte adicional basado en los comentarios durante el lanzamiento.

Columnas JSON

Número de seguimiento: 4021

Estado: Cortada

Tamaño de camiseta: Mediano

Esta característica presentará un mecanismo común y patrones para la compatibilidad con JSON que cualquier proveedor de base de datos puede implementar. Trabajaremos con la comunidad para alinear las implementaciones existentes para npgsql y Pomelo MySQL, y también agregaremos compatibilidad con SQL Server y SQLite.

ColumnAttribute.Order

Número de seguimiento: 10059

Estado: en curso

Tamaño de camiseta: pequeño

Esta característica permitirá el orden arbitrario de las columnas al crear una tabla con Migraciones o EnsureCreated. Tenga en cuenta que cambiar el orden de las columnas de una tabla existente requiere que se recompile la tabla y esto no es algo que planeemos admitir en ninguna versión de EF Core.

Rendimiento

Aunque EF Core suele ser más rápido que EF6, todavía hay áreas en las que se pueden mejorar considerablemente el rendimiento. Tenemos previsto abordar varias de estas áreas en EF Core 6.0, a la vez que mejoramos nuestra infraestructura y pruebas de rendimiento.

Este tema implicará una gran cantidad de investigación iterativa, que informará de dónde centramos los recursos. Tenemos previsto comenzar con:

Infraestructura de rendimiento y nuevas pruebas

Estado: Con ámbito/Completado

Tamaño de camiseta: Mediano

El código base de EF Core ya contiene un conjunto de pruebas comparativas de rendimiento que se ejecutan todos los días. Para la versión 6.0, planeamos mejorar la infraestructura de estas pruebas, así como agregar nuevas pruebas. También se generarán perfiles de escenarios de rendimiento principales y se corregirá cualquier instancia de nivel inferior.

Actualización: se ha mejorado la infraestructura de pruebas y se han agregado nuevas pruebas para admitir el trabajo realizado para EF Core 6. Las mejoras adicionales en esta área están fuera del ámbito de la versión EF Core 6.0.

Modelos compilados

Rastreado por #1906

Estado: Completado

Tamaño de camiseta: X-Large

Los modelos compilados permitirán la generación de una forma compilada del modelo ef. Esto proporcionará un mejor rendimiento de inicio, así como un rendimiento generalmente mejor al acceder al modelo.

TechEmpower Fortunes

Número de seguimiento: 23611

Estado: Completado

Tamaño de camiseta: X-Large

Durante varios años se han ejecutado los bancos de pruebas de TechEmpower estándar del sector en .NET sobre una base de datos PostgreSQL. El benchmark Fortunes es especialmente relevante para los escenarios de EF. Tenemos varias variaciones de este banco de pruebas, entre las que se incluyen:

  • Implementación que usa ADO.NET directamente. Esta es la implementación más rápida de las tres enumeradas aquí.
  • Una implementación en la que se usa Dapper. Esto es más lento que usar ADO.NET directamente, pero sigue siendo rápido.
  • Implementación que usa EF Core. Actualmente es la implementación más lenta de las tres.

El objetivo de EF Core 6.0 es obtener el rendimiento de EF Core para que coincida con el de Dapper en el banco de pruebas TechEmpower Fortunes. (Este es un desafío importante, pero haremos lo mejor para llegar lo más cerca posible).

Enlazador/AOT

Número de seguimiento: 10963

Estado: Delimitado/Completado

Tamaño de camiseta: Mediano

EF Core realiza grandes cantidades de generación de código en tiempo de ejecución. Esto es difícil para los modelos de aplicaciones que dependen de la vibración del árbol del enlazador, como .NET MAUI y Blazor, y las plataformas que no permiten la compilación dinámica, como iOS. Continuaremos investigando en este espacio como parte de EF Core 6.0 y realizaremos mejoras dirigidas como podamos. Sin embargo, no esperamos cerrar completamente la brecha en el marco de tiempo de la versión 6.0.

Migraciones e implementación

A partir de las investigaciones de realizadas para EF Core 5.0, planeamos ofrecer un soporte mejorado para gestionar las migraciones e implementar bases de datos. Esto incluye dos áreas principales:

Agrupaciones de migraciones

Rastreado por #19693

Estado: Completado

Tamaño de camiseta: Mediano

Un paquete de migraciones es un ejecutable autocontenido que aplica migraciones a una base de datos de producción. El comportamiento coincidirá con dotnet ef database update, pero debe facilitar mucho la implementación de SSH/Docker/PowerShell, ya que todo lo necesario está contenido en el único ejecutable.

Administración de migraciones

Rastreado por #22945

Estado: Cortada

Tamaño de camiseta: Grande

El número de migraciones creadas para una aplicación puede aumentar para convertirse en una carga. Además, estas migraciones se implementan con frecuencia con la aplicación incluso cuando esto no es necesario. En EF Core 6.0, tenemos previsto mejorar esto mediante una mejor administración de herramientas y proyectos o ensamblados. Dos problemas específicos que planeamos abordar son combinar muchas migraciones en una sola y regenerar una instantánea de modelo limpia.

Actualización: la mayor parte del trabajo de esta área se ha recortado durante la versión 6.0 debido a restricciones de recursos.

Mejora de las características existentes y corrección de errores

Cualquier problema o error que esté asignado al hito 6.0.0 está actualmente previsto para esta versión. Esto incluye muchas pequeñas mejoras y correcciones de errores.

Paridad de consultas de EF6

Seguimiento por incidencias etiquetadas con "ef6-parity" y en el hito 6.0

Estado: Con ámbito/Completado

Tamaño de camiseta: Grande

EF Core 5.0 admite la mayoría de los patrones de consulta admitidos por EF6, además de los patrones no admitidos en EF6. Para EF Core 6.0, tenemos previsto cerrar la brecha y hacer que las consultas de EF Core admitidas sean un verdadero superconjunto de consultas de EF6 compatibles. Esto se controla mediante la investigación de las diferencias, pero ya se incluyen incidencias de GroupBy como la traducción de GroupBy seguido de FirstOrDefault y consultas SQL sin procesar para tipos primitivos y no asignados.

Actualización: las consultas SQL sin formato para tipos primitivos y desasignados se han interrumpido a partir de la versión 6.0 debido a las restricciones de recursos y los ajustes de prioridad.

Objetos de valor

Número de seguimiento: 9906

Estado: Cortada

Tamaño de camiseta: Mediano

Anteriormente, la vista de equipo era la propietaria de las entidades, destinadas a la compatibilidad agregada, lo que también sería una aproximación razonable a los objetos de valor. La experiencia ha mostrado que esto no es el caso. Por lo tanto, en EF Core 6.0 tenemos previsto introducir una mejor experiencia centrada en las necesidades de los objetos de valor en el diseño controlado por dominios. Este enfoque se basará en convertidores de valores en lugar de en entidades de propiedad.

Este trabajo está diseñado inicialmente para permitir que los convertidores de valores se mapeen a varias columnas. Es posible que se incorpore soporte adicional en función de los comentarios durante el lanzamiento.

Proveedor de bases de datos de Azure Cosmos DB

Seguimiento por incidencias etiquetadas con "area-cosmos" y en el hito 6.0

Estado: expandido/completado

Tamaño de camiseta: Grande

Recopilamos activamente comentarios sobre qué mejoras se realizan en el proveedor de Azure Cosmos DB en EF Core 6.0. Actualizaremos este documento a medida que obtengamos más información. Por ahora, asegúrese de votar (👍) para las características de Azure Cosmos DB que necesita.

Actualización: hemos estado realizando un amplio desarrollo de clientes en torno al proveedor de Azure Cosmos DB. Esto ha dado lugar a las siguientes mejoras que se han incorporado en EF Core 6.0:

Actualización: los siguientes problemas se cortaron de la versión 6.0:

Exposición de convenciones de creación de modelos a aplicaciones

Número de seguimiento: 214

Estado: Cortada

Tamaño de camiseta: Mediano

EF Core usa un conjunto de convenciones para crear un modelo a partir de tipos de .NET. Actualmente, el proveedor de base de datos controla estas convenciones. En EF Core 6.0, pretendemos permitir que las aplicaciones se conecten y cambien estas convenciones.

Saldo de errores cero (ZBB)

Seguimiento por incidencias etiquetadas con type-bug en el hito 6.0

Estado: En curso/Con ámbito

Tamaño de camiseta: Grande

Tenemos previsto corregir todos los errores pendientes durante el período de tiempo de EF Core 6.0. Algunas cosas que se deben tener en cuenta:

  • Esto se aplica específicamente a los problemas etiquetados como errores de tipo .
  • Habrá excepciones, como cuando el error requiera un cambio de diseño o una nueva característica para corregirlo correctamente. Estos problemas se marcarán con la etiqueta blocked.
  • Los errores se puntuarán en función del riesgo cuando sea necesario, lo normal a medida que se aproxima una versión de GA/RTM.

Características varias

Seguimiento por incidencias etiquetadas con type-enhancement en el hito 6.0

Estado: Completado

Tamaño de camiseta: Grande

Entre las características varias planeadas para EF 6.0 se incluyen, pero no se limitan a:

Actualización: los siguientes problemas se cortaron de la versión 6.0:

Integración de .NET

El equipo de EF Core también trabaja en varias tecnologías relacionadas pero independientes. En concreto, tenemos previsto trabajar en:

Mejoras en System.Data

Seguimiento por incidencias en el repositorio dotnet\runtime etiquetadas con area-System.Data en el hito 6.0

Estado: Con ámbito/Completado

Tamaño de camiseta: Grande

Este trabajo incluye:

  • Implementación de la nueva API de procesamiento por lotes.
  • Trabajo continuado con otros equipos de .NET y la comunidad para comprender y evolucionar ADO.NET.

Actualización: los siguientes problemas se cortaron de la versión 6.0:

Mejoras en Microsoft.Data.Sqlite

Seguimiento por incidencias etiquetadas con type-enhancement y area-adonet-sqlite en el hito 6.0

Estado: Delimitado/Completado

Tamaño de camiseta: Mediano

Se han planificado varias mejoras pequeñas para Microsoft.Data.Sqlite, incluidas la agrupación de conexiones y las instrucciones preparadas para el rendimiento.

Actualización: las sentencias preparadas han sido eliminadas de la versión 6.0.

Tipos de referencia nulos

Número de seguimiento: 14150

Estado: Completado

Tamaño de camiseta: Grande

Se anotará el código de EF Core para usar tipos de referencia que aceptan valores NULL.

Experimentos e investigaciones

El equipo de EF planea invertir tiempo durante el período de tiempo de EF Core 6.0 experimentando e investigando en dos áreas. Se trata de un proceso de aprendizaje y, como tal, no se planean resultados concretos para la versión 6.0.

SqlServer.Core

Seguimiento en el repositorio de laboratorios de datos de .NET

Estado: en curso

Tamaño de camiseta: En curso

microsoft.Data.SqlClient es un proveedor de bases de datos de ADO.NET completo para SQL Server. Admite una amplia gama de características de SQL Server en .NET Core y .NET Framework. Sin embargo, también es un código base grande y antiguo con muchas interacciones complejas entre sus comportamientos. Esto dificulta la investigación de las posibles mejoras que se podrían realizar con las características más recientes de .NET Core. Por lo tanto, estamos iniciando un experimento en colaboración con la comunidad para determinar qué potencial existe para un controlador de SQL Server de alto rendimiento para .NET.

Importante

La inversión en Microsoft.Data.SqlClient no cambia. Seguirá siendo la manera recomendada de conectarse a SQL Server y SQL Azure, tanto con como sin EF Core. Seguirá admitiendo nuevas características de SQL Server a medida que se introducen.

GraphQL

Estado: en curso

Tamaño de camiseta: En curso

GraphQL ha estado ganando tracción en los últimos años en una variedad de plataformas. Tenemos previsto investigar el espacio y encontrar formas de mejorar la experiencia con .NET. Esto implicará trabajar con la comunidad para comprender y apoyar el ecosistema existente. También puede implicar inversiones específicas de Microsoft, ya sea en forma de contribuciones a trabajos existentes o en el desarrollo de piezas complementarias en el ecosistema de Microsoft.

DataVerse (anteriormente Common Data Services)

Estado: en curso

Tamaño de camiseta: En curso

dataVerse es un almacén de datos basado en columnas diseñado para el desarrollo rápido de aplicaciones empresariales. Controla automáticamente tipos de datos complejos como objetos binarios (BLOB) y tiene entidades y relaciones integradas, como organizaciones y contactos. Existe un SDK, pero los desarrolladores pueden beneficiarse de tener un proveedor de EF Core para usar consultas LINQ avanzadas, aprovechar las ventajas de la unidad de trabajo y tener una API de acceso a datos coherente. El equipo considerará diferentes formas de mejorar la experiencia del desarrollador de .NET conectándose a DataVerse.

Por debajo de la línea de corte

Seguimiento por problemas etiquetados con consider-for-current-release

Se trata de correcciones de errores y mejoras que no están programadas actualmente para el lanzamiento 6.0, pero que revisaremos en función de los comentarios a lo largo del lanzamiento junto con el progreso realizado en el trabajo mencionado anteriormente. Estos problemas podrían incluirse en EF Core 6.0 y automáticamente convertirse en candidatos para la próxima versión.

Además, durante la planeación siempre se tienen en cuenta los problemas más votados. Eliminar cualquiera de estos problemas en un lanzamiento siempre es doloroso, pero necesitamos un plan realista para los recursos que tenemos. Asegúrese de que ha votado (👍) por las características que necesita.

Sugerencias

Sus comentarios sobre la planeación son importantes. La mejor manera de indicar la importancia de un problema es votar (👍) para ese problema en GitHub. Estos datos se introducirán después en el proceso de planeación de la próxima versión.