[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 Vinicius da Rosa Pereira |
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 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
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.
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 .
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.