Ir para o conteúdo principal

[Simeron] Atualização .NET5 para .NET6 com banco Postgres

Data de elaboração 14/07/2022
Responsável pelo estudo

Gabriel Santi Binda

Raissa de Sousa Stolduski
Taillon Miguel Gonçalves

Vinicius da Rosa Pereira
Ádelle Camarão Monteiro

Equipe do estudo Tambakiss
Alvo Simeron
Origem

Melhoria ao atualizar para versão mais recente do .NET 6 e adaptar-se aos possíveis impactos da atualização.

Objetivo Analisar o impacto em atualizar a versão do .NET 5 para .NET 6, de acordo com as mudanças no Npgsql 6.0.
Documentação correlata (opcional)


Observações

1. 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.

2. Desenvolvimento

2.1 Principal mudança Npgsql 6.0

Melhorias de timestamp:

  • Suporte para timestamp with time zonetimestamp without time zonefoi 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 do timestamp with time zonetipo 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 zonee DateTime com Kind UTC, os últimos por timestamp without time zonee 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.

2.2 Mudanças 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.

Captura de tela 2022-07-19 094322.png

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.

Captura de tela 2022-07-19 094406.png

Captura de tela 2022-07-19 093735.png

Na aplicação, haviam algumas propriedade recebendo o horário local DateTime.Now foram alterado para DateTime.UtcNow . 

Captura de tela 2022-07-19 092358.png

3. 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.

4. 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.