Compartir a través de


Plan para Entity Framework Core 5.0

Importante

Se ha publicado EF Core 5.0. Esta página se conserva como un registro histórico del plan.

Como se describe en el proceso de planeamiento, se ha recopilado la información de las partes interesadas en un plan provisional para la versión EF Core 5.0.

Importante

Este plan sigue siendo un trabajo en curso. Nada de esto es un compromiso. Este plan es un punto de partida que evolucionará a medida que se obtenga más información. Es posible que algunos aspectos no planeados en la actualidad se incorporen a la versión 5.0. Es posible que algunos aspectos planeados en la actualidad se eliminen de la versión 5.0.

Información general

Número de versión y fecha de lanzamiento

En la actualidad, el lanzamiento de EF Core 5.0 está programado al mismo tiempo que .NET 5.0. Se ha elegido la versión "5.0" para la alineación con .NET 5.0.

Plataformas compatibles

Está previsto que EF Core 5.0 se ejecute en cualquier plataforma de .NET Standard 2.1, incluido .NET 5.0. Esto forma parte de la convergencia más general a nivel de .NET de las plataformas a .NET Core.

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

Últimos cambios

EF Core 5.0 contendrá algunos cambios importantes, pero serán mucho menos drásticos que en el caso de EF Core 3.0. El objetivo es permitir que la gran mayoría de las aplicaciones se actualicen sin interrupciones.

Se espera que haya algunos cambios importantes para los proveedores de bases de datos, especialmente relacionados con la compatibilidad con TPT. Pero se espera que el trabajo para actualizar un proveedor para 5.0 sea menor que el necesario para 3.0.

Temas

Hemos extraído algunas áreas o temas importantes que formarán la base de las grandes inversiones en EF Core 5.0.

Asignación de varios a varios totalmente transparente por convención

Jefes de desarrollo: @smitpatel, @AndriySvyryd y @lajones

Número de seguimiento: 10508

Talla de camiseta: L

Estado: Listo

Varios a varios es la característica más solicitada (506 votos aproximadamente) en el trabajo pendiente de GitHub.

La compatibilidad con las relaciones varios a varios se puede dividir en tres áreas principales:

  • Propiedades de navegación por omisión, que se describen en el siguiente tema.
  • Tipos de entidad de contenedor de propiedades. Permiten usar un tipo CLR estándar (por ejemplo, Dictionary) para las instancias de entidad, de modo que no se necesite un tipo CLR explícito para cada tipo de entidad. Número de seguimiento: 9914.
  • Facilitar la configuración de relaciones varios a varios.

Además de la compatibilidad con la navegación por omisión, ahora vamos a incorporar estas otras áreas de varios a varios a EF Core 5.0 para proporcionar una experiencia completa.

Propiedades de navegación de varios a varios (también denominado "omitir navegaciones")

Jefes de desarrollo: @smitpatel y @AndriySvyryd

Seguimiento realizado por #19003

Talla de camiseta: L

Estado: Listo

Tal y como se describe en el primer tema, la compatibilidad de varios a varios tiene varios aspectos que cabe destacar. En este tema se realiza un seguimiento específico del uso de las navegaciones por omisión. Creemos que el principal obstáculo para los que quieren que se admitan las relaciones varios a varios es la imposibilidad de usar relaciones "naturales", sin hacer referencia a la tabla de combinación, en la lógica de negocios, como las consultas. Es posible que el tipo de entidad de tabla de combinación siga existiendo, pero no debería interferir con la lógica de negocios.

Asignación de herencia de tabla por tipo (TPT)

Jefe de desarrollo: @AndriySvyryd y @smitpatel

Seguimiento realizado por #2266

Talla de camiseta: XL

Estado: Listo

TPT se va a incluir porque se trata de una característica muy solicitada (aproximadamente 289 votos; en tercera posición) y porque requiere algunos cambios de bajo nivel que consideramos adecuados para la naturaleza fundamental del plan general de .NET 5. Esperamos que esto genere cambios importantes para los proveedores de bases de datos, aunque deberían ser mucho menos graves que los necesarios para la versión 3.0.

Inclusión filtrada

Jefe de desarrollo: @maumar

Seguimiento realizado por #1833

Talla de camiseta: M

Estado: Listo

Inclusión filtrada es una característica muy solicitada (aproximadamente 376 votos; en segunda posición) que no requiere demasiado trabajo y que creemos que desbloqueará o facilitará escenarios que actualmente requieren filtros de nivel de modelo o consultas más complejas.

División de Include

Jefe de desarrollo: @smitpatel

Número de seguimiento: 20892

Talla de camiseta: L

Estado: Listo

EF Core 3.0 cambió el comportamiento predeterminado para crear una consulta SQL única para una consulta LINQ determinada. Esto provocó una gran cantidad de degradaciones de rendimiento para las consultas que usan Include para varias colecciones.

En EF Core 5.0, se mantiene el nuevo comportamiento predeterminado. Sin embargo, EF Core 5.0 ahora permite la generación de varias consultas para los métodos Include de la colección en los que tener una sola consulta provoca deficiencias en el rendimiento.

Dependencias de uno a uno obligatorias

Jefes de desarrollo: @AndriySvyryd y @smitpatel

Número de seguimiento: 12100

Talla de camiseta: M

Estado: Listo

En EF Core 3.0, todas las dependencias, incluidos los tipos de propiedad, son opcionales (por ejemplo, Person.Address puede ser NULL). En EF Core 5.0, se pueden configurar las dependencias según sea necesario.

Racionalización de ToTable, ToQuery, ToView, FromSql, etc.

Jefes de desarrollo: @AndriySvyryd y @smitpatel

Seguimiento realizado por #17270

Talla de camiseta: L

Estado: Listo

Se han realizado avances en versiones anteriores hacia la compatibilidad con SQL sin procesar, tipos sin clave y áreas relacionadas. Pero hay brechas e incoherencias en el funcionamiento en conjunto de todos los elementos. El objetivo para la versión 5.0 es corregirlos y crear una buena experiencia para definir, migrar y usar otros tipos de entidades y sus consultas y artefactos de base de datos asociados. Esto también puede implicar actualizaciones de la API de consulta compilada.

Tenga en cuenta que este elemento puede dar lugar a algunos cambios importantes en el nivel de la aplicación, ya que algunas de las funcionalidades actuales son demasiado permisivas, lo que puede conducir rápidamente a que los usuarios cometan errores. Lo más probable es que parte de esta funcionalidad se bloquee y se proporcionen instrucciones sobre lo que se debe hacer en su lugar.

Mejoras generales de consultas

Jefes de desarrollo: @smitpatel y @maumar

Seguimiento por problemas etiquetados con area-query en el hito 5.0

Talla de camiseta: XL

Estado: Listo

El código de traducción de consultas se ha reescrito de forma exhaustiva para EF Core 3.0. Por este motivo, el código de consulta tiene un estado mucho más robusto. Para la versión 5.0, no se planean cambios importantes en las consultas más allá de los necesarios para admitir TPT y la omisión de propiedades de navegación. Pero se necesita un trabajo importante para corregir las deudas técnicas generadas tras la revisión de la versión 3.0. También tenemos previsto corregir muchos errores e implementar pequeñas mejoras para mejorar aún más la experiencia general de las consultas.

Migraciones y experiencia de implementación

Jefes de desarrollo: @bricelam

Seguimiento realizado por #19587

Talla de camiseta: L

Estado: Con ámbito/Listo

Ámbito: la característica de conjunto de migraciones se ha aplazado hasta después de la versión EF Core 5.0. Sin embargo, en EF Core 5.0 se incluirán otras mejoras de destino relacionadas con las migraciones.

En la actualidad, muchos desarrolladores migran sus bases de datos en el momento de inicio de la aplicación. Esto es fácil, pero no se recomienda porque:

  • Es posible que varios subprocesos, procesos o servidores intenten migrar la base de datos simultáneamente
  • Es posible que las aplicaciones intenten acceder a un estado incoherente mientras se produce esta operación
  • Normalmente, no se deben conceder los permisos de base de datos para modificar el esquema para la ejecución de la aplicación
  • Es difícil revertir a un estado limpio si se produce algún error

Queremos ofrecer una mejor experiencia que permita migrar la base de datos de forma sencilla en el momento de la implementación. Esto debería:

  • Funcionar en Linux, Mac y Windows
  • Ser una experiencia positiva en la línea de comandos
  • Admitir escenarios con contenedores
  • Funcionar con flujos y herramientas de implementación del mundo real que se usan habitualmente
  • Integrarse al menos en Visual Studio

Lo más probable es que el resultado sea un gran número de pequeñas mejoras en EF Core (por ejemplo, mejores migraciones en SQLite), junto con instrucciones y colaboraciones a largo plazo con otros equipos para mejorar las experiencias de un extremo a otro que van más allá de EF exclusivamente.

Experiencia de las plataformas de EF Core

Jefes de desarrollo: @roji y @bricelam

Seguimiento realizado por #19588

Talla de camiseta: L

Estado: Ámbito/Listo

Ámbito: la guía y los ejemplos de la plataforma se publican para Blazor, Xamarin, WinForms y WPF. Xamarin y otros trabajos de AOT o enlazador ahora están previstos para EF Core 6.0.

Disponemos de instrucciones de calidad para usar EF Core en aplicaciones web tradicionales similares a MVC. Las instrucciones para otras plataformas y modelos de aplicación no existen o no están actualizadas. Para EF Core 5.0, el objetivo es investigar, mejorar y documentar la experiencia de uso de EF Core con:

  • Blazor
  • Xamarin, incluido el uso del artículo de AOT o vinculador
  • WinForms, WPF, WinUI y posiblemente otros marcos de interfaz de usuario

Lo más probable es que el resultado sea un gran número de pequeñas mejoras en EF Core, junto con instrucciones y colaboraciones a largo plazo con otros equipos para mejorar las experiencias de un extremo a otro que van más allá de EF exclusivamente.

Las áreas concretas que tenemos previsto examinar son las siguientes:

  • Implementación, incluida la experiencia en el uso de herramientas de EF como para migraciones
  • Modelos de aplicación, como Xamarin y Blazor, y probablemente otros
  • Experiencias de SQLite, incluida la experiencia espacial y las recompilaciones de tabla
  • Experiencias de AOT y vinculación
  • Integración de diagnósticos, incluidos los contadores de rendimiento

Rendimiento

Jefe de desarrollo: @roji

Seguimiento por problemas etiquetados con area-perf en el hito 5.0

Talla de camiseta: L

Estado: Con ámbito/Listo

Ámbito: se han completado las principales mejoras de rendimiento en el proveedor Npgsql. Ahora se ha planificado otro trabajo de rendimiento para EF Core 6.0.

Para EF Core, el plan es mejorar nuestro conjunto de pruebas comparativas de rendimiento y realizar mejoras de rendimiento dirigidas al tiempo de ejecución. Además, tenemos previsto completar la nueva API de procesamiento por lotes de ADO.NET, que se ha creado como prototipo durante el ciclo de versiones de 3.0. En el nivel de ADO.NET también se planean mejoras de rendimiento adicionales para el proveedor Npgsql.

Como parte de este trabajo, también está previsto agregar contadores de rendimiento de ADO.NET y EF Core, y otros diagnósticos según corresponda.

Documentación de arquitectura y colaboradores

Jefe de documentación: @ajcvickers

Seguimiento realizado por #1920

Talla de camiseta: L

Estado: Cortar

La idea es facilitar la comprensión de lo que sucede dentro de EF Core. Esto puede ser útil para cualquiera que utilice EF Core, pero la motivación principal es facilitarlo para los usuarios externos:

  • Contribuir al código de EF Core
  • Crear proveedores de bases de datos
  • Compilar otras extensiones

Actualización: Desafortunadamente, este plan era demasiado ambicioso. Seguimos creyendo que es un aspecto importante, pero lamentablemente no se incluirá en EF Core 5.0.

Documentación de Microsoft.Data.Sqlite

Jefe de documentación: @bricelam

Seguimiento realizado por #1675

Talla de camiseta: M

Estado: Completado. La nueva documentación está activa en Microsoft Learn.

El equipo de EF también posee el proveedor de ADO.NET Microsoft.Data.Sqlite. Tenemos previsto documentar completamente este proveedor como parte de la versión 5.0.

Documentación general

Jefe de documentación: @ajcvickers

Seguimiento mediante problemas en el repositorio de documentación del hito 5.0

Talla de camiseta: L

Estado: En curso

Ya se ha iniciado el proceso de actualización de la documentación de las versiones 3.0 y 3.1. También se está trabajando en:

  • Una revisión de los artículos de introducción para que sea más fácil de seguir
  • La reorganización de los artículos para facilitar la búsqueda y la adición de referencias cruzadas
  • La incorporación de más detalles y aclaraciones a artículos existente
  • La actualización de los ejemplos y la incorporación de otros nuevos

Corrección de errores

Seguimiento por problemas etiquetados con type-bug en el hito 5.0

Desarrolladores: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd, @ajcvickers

Talla de camiseta: L

Estado: En curso

En el momento de escribir este documento, se han evaluado 135 errores para corregirlos en la versión 5.0 (ya se han corregido 62), pero hay una superposición significativa con la sección anterior Mejoras generales de consultas.

La velocidad de entrada (problemas que acaban como trabajo en un hito) fue de aproximadamente 23 problemas al mes en el transcurso de la versión 3.0. No todos se tendrán que corregir en la versión 5.0. Como estimación aproximada, tenemos previsto corregir unos 150 problemas adicionales para la versión 5.0.

Mejoras menores

Seguimiento por problemas etiquetados con type-enhancement en el hito 5.0

Desarrolladores: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd, @ajcvickers

Talla de camiseta: L

Estado: Listo

Además de las características más importantes descritas antes, también hay muchas mejoras más pequeñas programadas para la versión 5.0 a fin de corregir los "elementos excluidos". Tenga en cuenta que muchas de estas mejoras también se incluyen en los temas más generales descritos antes.

Nivel inferior

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

Se trata de correcciones de errores y mejoras no programadas actualmente para la versión 5.0, pero que se considerarán objetivos de extensión en función del progreso realizado en el trabajo anterior.

Además, durante la planeación siempre se tienen en cuenta los problemas más votados. Excluir cualquiera de estos problemas de una versión siempre es complicado, pero necesitamos un plan realista para los recursos que tenemos.

Sugerencias

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