[Simeron] Atualização .NET5 para .NET6 com banco Postgres
Objetivo
O objetivo deste estudo é analisar o impacto em atualizar a versão do .NET 5 para .NET 6, de acordo com as mudanças no Npgsql 6.0.
Introdução
Dentro deste estudo, serão pontuadas as mudanças do Npgsql 6.0, e as alterações necessárias para atender as necessidades do sistema Simeron.
Principal mudança Npgsql 6.0
Melhorias de timestamp:
-
Suporte para
timestamp with time zone
etimestamp without time zone
foi racionalizado e simplificado e alinhado com as melhores práticas do PostgreSQL. Em particular, o padrão "UTC em todos os lugares" é muito melhor suportado por meio dotimestamp with time zone
tipo PostgreSQL, que é a maneira recomendada de lidar com timestamps. Uma explicação detalhada está disponível nesta postagem do blog , abaixo está um resumo das principais melhorias.- Os carimbos de data/hora UTC foram claramente separados dos carimbos de data/hora não-UTC, alinhando-se com os tipos do PostgreSQL. Os primeiros são representados por
timestamp with time zone
e DateTime com Kind UTC, os últimos portimestamp without time zone
e DateTime com Kind Local ou Unspecified. Recomenda-se usar carimbos de data/hora UTC sempre que possível. - O Npgsql não executa mais nenhuma conversão implícita de fuso horário ao ler ou gravar qualquer valor de carimbo de data / hora - o valor no banco de dados é o que você obtém e o fuso horário da máquina não desempenha mais nenhum papel ao ler/gravar valores.
- O Npgsql não suporta mais representações de data/hora que não podem ser totalmente rodadas para o banco de dados. Se não puder ser totalmente armazenado como está, você não poderá gravá-lo.
- Uma opção de compatibilidade permite desativar o novo comportamento para manter a compatibilidade com versões anteriores.
- Os carimbos de data/hora UTC foram claramente separados dos carimbos de data/hora não-UTC, alinhando-se com os tipos do PostgreSQL. Os primeiros são representados por
Mudança necessárias no código do Simeron
Antes da versão 6.0 do Npgsql, as propriedades com o tipo DateTime eram mapeadas pelo entity framework como "timestamp without time zone
" -> 2020-01-01 12:00:00 e adicionava o tipo timespamp no banco de dados.
Após a atualização o Tipo DateTime passou a ser mapeado pelo entity framework "timestamp with time zone
" -> 2020-01-01 12:00:00+02 e adiciona o tipo timespampz no banco de dados.
Na aplicação, haviam algumas propriedade recebendo o horário local DateTime.Now foram alterado para DateTime.UtcNow .
Conclusão
Todos os campo criados com DateTime no Npgsql 6.0. devem conter a marcação de fuso horário, para que não ocorra erro na comunicação com o banco de dados.
Referências
[1] NPGSQL, NPGSQL. 6.0 Release Notes. 2021. Disponível em: https://www.npgsql.org/efcore/release-notes/6.0.html?tabs=annotations. Acesso em: 19 jul. 2022.
ENVOLVIDOS
- Gabriel Santi Binda
- Raissa de Sousa Stolduski
- Taillon Miguel Gonçalves
- Vinicius da Rosa Pereira
- Ádelle Camarão Monteiro