Cambios que afectan al proveedor

Esta página contiene vínculos a solicitudes de incorporación de cambios realizadas en el repositorio de EF Core que pueden requerir que los autores de otros proveedores de bases de datos reaccionen. La intención es proporcionar un punto de partida para los autores de proveedores de bases de datos de terceros existentes al actualizar su proveedor a una nueva versión.

Estamos iniciando este registro con los cambios de la versión 2.1 a la versión 2.2. Antes de la versión 2.1 usábamos las etiquetas providers-beware y providers-fyi en nuestros problemas y solicitudes de incorporación de cambios.

2.2 ---> 3.x

Tenga en cuenta que muchos de los cambios importantes de nivel de aplicación también afectan a los proveedores.

  • https://github.com/dotnet/efcore/pull/14022
    • Se han quitado las API obsoletas y se han reducido las sobrecargas de parámetros opcionales.
    • Se ha quitado DatabaseColumn.GetUnderlyingStoreType().
  • https://github.com/dotnet/efcore/pull/14589
    • Se han quitado las API obsoletas.
  • https://github.com/dotnet/efcore/pull/15044
    • Es posible que las subclases de CharTypeMapping se hayan interrumpido debido a los cambios de comportamiento necesarios para corregir un par de errores en la implementación base.
  • https://github.com/dotnet/efcore/pull/15090
    • Se ha agregado una clase base para IDatabaseModelFactory y se ha actualizado para usar un objeto de parámetro para mitigar las interrupciones futuras.
  • https://github.com/dotnet/efcore/pull/15123
    • Se han usado objetos de parámetro en MigrationsSqlGenerator para mitigar las interrupciones futuras.
  • https://github.com/dotnet/efcore/pull/14972
    • La configuración explícita de los niveles de registro requería algunos cambios en las API que los proveedores pueden estar usando. En concreto, si los proveedores usan directamente la infraestructura de registro, este cambio puede interrumpir ese uso. Además, los proveedores que usen la infraestructura (que será pública) en el futuro deberán derivarse de LoggingDefinitions o RelationalLoggingDefinitions. Consulte los proveedores de SQL Server y en memoria para ver ejemplos.
  • https://github.com/dotnet/efcore/pull/15091
    • Las cadenas de recursos Core, Relational y Abstractions ahora son públicas.
    • CoreLoggerExtensions y RelationalLoggerExtensions son públicos. Los proveedores deben usar estas API al registrar eventos definidos en el nivel principal o relacional. No acceda directamente a los recursos de registro; siguen siendo internos.
    • IRawSqlCommandBuilder ha cambiado de un servicio singleton a un servicio con ámbito.
    • IMigrationsSqlGenerator ha cambiado de un servicio singleton a un servicio con ámbito.
  • https://github.com/dotnet/efcore/pull/14706
    • La infraestructura para compilar comandos relacionales se ha hecho pública para que los proveedores puedan usarlos de forma segura y refactorizarlos ligeramente.
  • https://github.com/dotnet/efcore/pull/14733
    • ILazyLoader ha cambiado de un servicio singleton a un servicio con ámbito.
  • https://github.com/dotnet/efcore/pull/14610
    • IUpdateSqlGenerator ha cambiado de un servicio singleton a un servicio con ámbito.
    • Además, se ha quitado ISingletonUpdateSqlGenerator.
  • https://github.com/dotnet/efcore/pull/15067
    • Ahora se ha hecho público un montón de código interno que usan los proveedores.
    • Ya no debería ser necesario hacer referencia a IndentedStringBuilder, ya que se ha factorizado fuera de los lugares que lo exponen.
    • Los usos de NonCapturingLazyInitializer deben reemplazarse por LazyInitializer de BCL.
  • https://github.com/dotnet/efcore/pull/14608
    • Este cambio se trata completamente en el documento de cambios importantes de la aplicación. En el caso de los proveedores, puede tener un mayor impacto, ya que probar EF Core a menudo puede dar lugar a este problema. Por consiguiente, la infraestructura de prueba ha cambiado para que sea menos probable.
  • https://github.com/dotnet/efcore/issues/13961
    • Se ha simplificado EntityMaterializerSource.
  • https://github.com/dotnet/efcore/pull/14895
    • La traducción de StartsWith ha cambiado de forma que los proveedores pueden querer/necesitar reaccionar.
  • https://github.com/dotnet/efcore/pull/15168
    • Los servicios establecidos de convención han cambiado. Los proveedores ahora deben heredar de "ProviderConventionSet" o "RelationalConventionSet".
    • Aunque se pueden agregar personalizaciones mediante los servicios IConventionSetCustomizer, está pensado para que lo usen otras extensiones, no proveedores.
    • Las convenciones usadas en tiempo de ejecución deben resolverse desde IConventionSetBuilder.
  • https://github.com/dotnet/efcore/pull/15288
    • La propagación de datos se ha refactorizado en una API pública para evitar la necesidad de usar tipos internos. Este cambio solo debe afectar a los proveedores no relacionales, ya que la propagación se controla mediante la clase relacional base en todos los proveedores relacionales.

2.1 ---> 2.2

Cambios solo de prueba

  • https://github.com/dotnet/efcore/pull/12057: Se permiten delimitadores de SQL personalizables en pruebas
    • Cambios de prueba que permiten comparaciones de punto flotante no estrictos en BuiltInDataTypesTestBase.
    • Cambios de prueba que permiten volver a usar las pruebas de consulta con diferentes delimitadores de SQL.
  • https://github.com/dotnet/efcore/pull/12072: Se han agregado pruebas DbFunction a las pruebas de especificación relacionales
    • De modo que estas pruebas se puedan ejecutar en todos los proveedores de bases de datos.
  • https://github.com/dotnet/efcore/pull/12362: Limpieza de pruebas asincrónicas
    • Se han quitado las llamadas Wait asincrónicas innecesarias y se ha cambiado el nombre algunos métodos de prueba.
  • https://github.com/dotnet/efcore/pull/12666: Unificar la infraestructura de prueba de registro
    • Se ha agregaron CreateListLoggerFactory y se han quitado algunas infraestructuras de registro anteriores, lo que requerirá que los proveedores que usen estas pruebas reaccionen.
  • https://github.com/dotnet/efcore/pull/12500: Se ejecutan más pruebas de consulta de forma sincrónica y asincrónica
    • Los nombres de prueba y la factorización han cambiado, lo que requerirá que los proveedores que usen estas pruebas reaccionen.
  • https://github.com/dotnet/efcore/pull/12766: Se ha cambiado el nombre de las navegaciones en el modelo ComplexNavigations
    • Es posible que los proveedores que usen estas pruebas deban reaccionar.
  • https://github.com/dotnet/efcore/pull/12141: Se ha devuelto el contexto al grupo en lugar de desecharlo en pruebas funcionales
    • Este cambio incluye algunas refactorizaciones de prueba que pueden requerir que los proveedores reaccionen.

Cambios en el código de producto y de prueba

  • https://github.com/dotnet/efcore/pull/12109: Se han consolidado los métodos RelationalTypeMapping.Clone
    • Los cambios en la versión 2.1 de RelationalTypeMapping permitían una simplificación en las clases derivadas. No creemos que esto fuera importante para los proveedores, pero los proveedores pueden aprovechar este cambio en sus clases de asignación de tipos derivados.
  • https://github.com/dotnet/efcore/pull/12069: Consultas etiquetadas o con nombre
    • Se ha agregado infraestructura para etiquetar consultas LINQ y hacer que esas etiquetas aparezcan como comentarios en SQL. Esto puede requerir que los proveedores reaccionen en la generación de SQL.
  • https://github.com/dotnet/efcore/pull/13115: Compatibilidad con datos espaciales a través de NTS
    • Permite que las asignaciones de tipos y los traductores de miembros se registren fuera del proveedor.
      • Los proveedores deben llamar a base.FindMapping() en su implementación de ITypeMappingSource para que funcione.
    • Siga este patrón para agregar compatibilidad espacial al proveedor que sea coherente entre proveedores.
  • https://github.com/dotnet/efcore/pull/13199: Se ha agregado una depuración mejorada para la creación de proveedores de servicios
    • Permite que DbContextOptionsExtensions implemente una nueva interfaz que pueda ayudar a los usuarios a comprender por qué se está recompilando el proveedor de servicios interno.
  • https://github.com/dotnet/efcore/pull/13289: Se ha agregado CanConnect API para su uso mediante comprobaciones de estado
    • Esta solicitud de incorporación de cambios agrega el concepto de CanConnect que usarán las comprobaciones de estado de ASP.NET Core para determinar si la base de datos está disponible. De forma predeterminada, la implementación relacional solo llama a Exist, pero los proveedores pueden implementar algo diferente si es necesario. Los proveedores no relacionales deberán implementar la nueva API para que se pueda usar la comprobación de estado.
  • https://github.com/dotnet/efcore/pull/13306: Se ha actualizado RelationalTypeMapping base para no establecer el tamaño de DbParameter
    • Se ha dejado de establecer la configuración de tamaño de forma predeterminada, ya que puede provocar truncamiento. Es posible que los proveedores deban agregar su propia lógica si se debe establecer el tamaño.
  • https://github.com/dotnet/efcore/pull/13372: RevEng: Especificar siempre el tipo de columna para las columnas decimales
    • Configure siempre el tipo de columna para las columnas decimales en código estructurado en lugar de configurarlo por convención.
    • Los proveedores no deben exigir ningún cambio por su parte.
  • https://github.com/dotnet/efcore/pull/13469: Se ha agregado CaseExpression para generar expresiones CASE de SQL
  • https://github.com/dotnet/efcore/pull/13648: Se agregado la capacidad de especificar asignaciones de tipos en SqlFunctionExpression para mejorar la inferencia de tipos de almacén de argumentos y resultados.