Alterações que afetam o provedor

Essa página contém links para solicitações de pull feitas no repositório EF Core que podem exigir que os autores de outros provedores de banco de dados reajam. A intenção é fornecer um ponto de partida para autores de provedores de banco de dados de terceiros existentes ao atualizar seu provedor para uma nova versão.

Estamos iniciando esse log com alterações de 2.1 para 2.2. Antes da 2.1, usamos os rótulos providers-beware e providers-fyi em nossos problemas e solicitações de pull.

2.2 ---> 3.x

Observe que muitas das alterações de falha no nível do aplicativo também afetarão os provedores.

  • https://github.com/dotnet/efcore/pull/14022
    • APIs obsoletas removidas e sobrecargas de parâmetro opcionais recolhidas
    • Removeu DatabaseColumn.GetUnderlyingStoreType()
  • https://github.com/dotnet/efcore/pull/14589
    • APIs obsoletas removidas
  • https://github.com/dotnet/efcore/pull/15044
    • Subclasses de CharTypeMapping podem ter sido interrompidas devido a alterações de comportamento necessárias para corrigir alguns bugs na implementação base.
  • https://github.com/dotnet/efcore/pull/15090
    • Foi adicionada uma classe base para IDatabaseModelFactory e ela foi atualizada para usar um objeto de parâmetro para atenuar quebras futuras.
  • https://github.com/dotnet/efcore/pull/15123
    • Os objetos de parâmetro usados no MigrationsSqlGenerator foram usados para atenuar as quebras futuras.
  • https://github.com/dotnet/efcore/pull/14972
    • A configuração explícita dos níveis de log exigia algumas alterações nas APIs que os provedores podem estar usando. Especificamente, se os provedores estiverem usando a infraestrutura de log diretamente, essa alteração poderá interromper esse uso. Além disso, os provedores que usam a infraestrutura (que será pública) daqui para frente precisarão derivar de LoggingDefinitions ou RelationalLoggingDefinitions. Consulte o SQL Server e os provedores na memória para obter exemplos.
  • https://github.com/dotnet/efcore/pull/15091
    • As cadeias de caracteres de recurso Core, Relational e Abstractions agora são públicas.
    • CoreLoggerExtensions e RelationalLoggerExtensions agora são públicos. Os provedores devem usar essas APIs ao registrar eventos definidos no nível principal ou relacional. Não acesse diretamente os recursos de registro em log; eles ainda são internos.
    • IRawSqlCommandBuilder foi alterado de um serviço singleton para um serviço com escopo
    • IMigrationsSqlGenerator foi alterado de um serviço singleton para um serviço com escopo
  • https://github.com/dotnet/efcore/pull/14706
    • A infraestrutura para a criação de comandos relacionais se tornou pública para ser usada com segurança por provedores e refatorada ligeiramente.
  • https://github.com/dotnet/efcore/pull/14733
    • ILazyLoader foi alterado de um serviço com escopo para um serviço transitório
  • https://github.com/dotnet/efcore/pull/14610
    • IUpdateSqlGenerator foi alterado de um serviço com escopo para um serviço singleton
    • Além disso, ISingletonUpdateSqlGenerator foi removido
  • https://github.com/dotnet/efcore/pull/15067
    • Muitos códigos internos que estavam sendo usados por provedores se tornaram públicos
    • Não deve ser mais necessário referenciar IndentedStringBuilder, pois ele foi fatorado fora dos lugares que o expuseram
    • Os usos dos NonCapturingLazyInitializer devem ser substituídos por LazyInitializer do BCL
  • https://github.com/dotnet/efcore/pull/14608
    • Essa alteração é totalmente abordada no documento de alterações de falha do aplicativo. Para os provedores, isso pode causar mais impacto porque testar o núcleo do EF geralmente pode resultar nesse problema, portanto, a infraestrutura de teste foi alterada para tornar isso menos provável.
  • https://github.com/dotnet/efcore/issues/13961
    • EntityMaterializerSource foi simplificado
  • https://github.com/dotnet/efcore/pull/14895
    • A tradução de StartsWith foi alterada de uma maneira que os provedores podem querer ou poder reagir
  • https://github.com/dotnet/efcore/pull/15168
    • Os serviços do conjunto de convenções foram alterados. Os provedores agora devem herdar de "ProviderConventionSet" ou "RelationalConventionSet".
    • As personalizações podem ser adicionadas por meio de serviços IConventionSetCustomizer, mas isso se destina a ser usado por outras extensões, não por provedores.
    • As convenções usadas no runtime devem ser resolvidas de IConventionSetBuilder.
  • https://github.com/dotnet/efcore/pull/15288
    • A propagação de dados foi refatorada em uma API pública para evitar a necessidade de usar tipos internos. Isso só deve afetar provedores não relacionais, uma vez que a propagação é tratada pela classe relacional base para todos os provedores relacionais.

2.1 ---> 2.2

Alterações somente teste

  • https://github.com/dotnet/efcore/pull/12057 - Permitir delimitadores SQL personalizáveis em testes
    • Testar alterações que permitem comparações de ponto flutuante não estritas no BuiltInDataTypesTestBase
    • Testar alterações que permitem que testes de consulta sejam reutilizantes com delimitadores SQL diferentes
  • https://github.com/dotnet/efcore/pull/12072 - Adicionar testes DbFunction aos testes de especificação relacional
    • De modo que esses testes possam ser executados em todos os provedores de banco de dados
  • https://github.com/dotnet/efcore/pull/12362 - Limpeza de teste assíncrono
    • Remover chamadas Wait, assíncrono desnecessário e renomear alguns métodos de teste
  • https://github.com/dotnet/efcore/pull/12666 – Unificar a infraestrutura de teste de log
    • CreateListLoggerFactory foi adicionada e algumas infraestruturas de log anteriores foram removidas, o que exigirá que os provedores que usam esses testes reajam
  • https://github.com/dotnet/efcore/pull/12500 – Executar mais testes de consulta de forma síncrona e assíncrona
    • Nomes de teste e fatoramento foram alterados, o que exigirá que os provedores que usam esses testes reajam
  • https://github.com/dotnet/efcore/pull/12766 - Renomeando navegações no modelo ComplexNavigations
    • Os provedores que usam esses testes podem precisar reagir
  • https://github.com/dotnet/efcore/pull/12141 - Retornar o contexto para o pool em vez de descartar em testes funcionais
    • Essa alteração inclui algumas refatorações de teste que podem exigir que os provedores reajam

Testar e alterar o código do produto

  • https://github.com/dotnet/efcore/pull/12109 – Consolidar métodos RelationalTypeMapping.Clone
    • Alterações na versão 2.1 para RelationalTypeMapping permitidas para uma simplificação em classes derivadas. Não acreditamos que isso tenha sido uma falha para os provedores, mas eles podem aproveitar essa alteração em suas classes de mapeamento de tipo derivadas.
  • https://github.com/dotnet/efcore/pull/12069 - Consultas marcadas ou nomeadas
    • Adiciona infraestrutura para marcar consultas LINQ e fazer com que essas marcas apareçam como comentários no SQL. Isso pode exigir que os provedores reajam na geração do SQL.
  • https://github.com/dotnet/efcore/pull/13115 – Suporte a dados espaciais por meio do NTS
    • Permite que mapeamentos de tipo e tradutores de membros sejam registrados fora do provedor
      • Os provedores devem chamar base.FindMapping() em sua implementação ITypeMappingSource para que ele funcione
    • Siga esse padrão para adicionar suporte espacial ao seu provedor consistente entre provedores.
  • https://github.com/dotnet/efcore/pull/13199 - Adicionar depuração aprimorada para criação do provedor de serviços
    • Permite que DbContextOptionsExtensions implemente uma nova interface que ajude as pessoas a entender por que o provedor de serviços interno está sendo recriado
  • https://github.com/dotnet/efcore/pull/13289 - Adiciona a API CanConnect para uso por verificações de integridade
    • Essa PR adiciona o conceito CanConnect que será usado por verificações de integridade do ASP.NET Core para determinar se o banco de dados está disponível. Por padrão, a implementação relacional apenas chama Exist, mas os provedores podem implementar algo diferente, se necessário. Os provedores não relacionais precisarão implementar a nova API para que a verificação de integridade seja utilizável.
  • https://github.com/dotnet/efcore/pull/13306 - Atualizar a base RelationalTypeMapping para não definir o tamanho do DbParameter
    • Interrompa a configuração de Tamanho por padrão, pois pode causar truncamento. Os provedores podem precisar adicionar sua própria lógica se o Tamanho precisar ser definido.
  • https://github.com/dotnet/efcore/pull/13372 - RevEng: sempre especifique o tipo de coluna para colunas decimais
    • Sempre configure o tipo de coluna para colunas decimais no código scaffolded em vez de configurar por convenção.
    • Os provedores não devem exigir alterações no final.
  • https://github.com/dotnet/efcore/pull/13469 - Adiciona CaseExpression para gerar expressões CASE do SQL
  • https://github.com/dotnet/efcore/pull/13648 - Adiciona a capacidade de especificar mapeamentos de tipo no SqlFunctionExpression para melhorar a inferência de tipos de armazenamento de argumentos e resultados.