Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Entity Framework Core + Postgres

Olá. Estou com uma web api .net core 8 utilizando postgres. Tenho 2 campos data inicial e data final que são do tipo DateOnly. Ao salvar os dados no postgres no meu docker funciona normalmente, porém ao salvar no postgres RDS da AWS, o campo data inicial salva normalmente porém o campo data final está salvando como -Infinity. Já setei ajustar algumas configurações como:

AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);

E também ajustei o timezone para America/Sao Paulo no DB Parameter do banco na AWS.

Alguém já passou por isso?

2 respostas

Olá! Tudo bem?

O que você está descrevendo, com o campo data final sendo salvo como -Infinity, pode estar relacionado à forma como o PostgreSQL lida com valores de data e hora, especialmente quando há diferenças de configuração entre o ambiente local (Docker) e o RDS.

Aqui estão algumas sugestões que podem ajudar a resolver o problema:

  1. Verifique a versão do PostgreSQL: certifique-se de que a versão do PostgreSQL no seu ambiente Docker é a mesma que a do RDS da AWS. Diferentes versões podem ter comportamentos variados em relação ao manuseio de datas.

  2. Verifique o tipo de dados no banco de dados: confirme que os tipos de dados no banco de dados RDS são os mesmos que você espera (por exemplo, DATE para campos DateOnly). Às vezes, a diferença de tipo de dados pode causar problemas na conversão.

  3. Configurações de Timezone: você mencionou que ajustou o timezone no DB Parameter do RDS. Verifique se a aplicação .NET também está configurada para usar o mesmo timezone. Isso pode ser feito configurando o TimeZoneInfo na aplicação.

Espero que essas dicas ajudem a solucionar o problema.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.
solução!

Olá tudo bem, eu segui por esse caminho antes de postar e não funcionou. Porém consegui resolver o problema de outra forma, vou tentar deixar bem detalhado para que outros possam achar o conteúdo e ajustar:

1 - Troquei a versão padrão da imagem do aspnet e do sdk .net para a versão alpine de: FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base para: FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS base de: FROM mcr.microsoft.com/dotnet/sdk:8.0 AS base para: FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS base

**2 - Ajustei as ENVs com e ajustei a ICU-LIB **

ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false ENV TZ=America/Sao_Paulo ENV LANG=pt_BR.UTF-8 LANGUAGE=pt_BR.UTF-8 RUN apk add --no-cache icu-data-full icu-libs

Exemplo de docker file:

FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS base
USER root
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MeuProjeto.WebApi/MeuProjeto.WebApi.csproj", "MeuProjeto.WebApi/"]
COPY ["MeuProjeto.Application/MeuProjeto.Application.csproj", "MeuProjeto.Application/"]
RUN dotnet restore "MeuProjeto.WebApi/MeuProjeto.WebApi.csproj"
COPY . .
WORKDIR "/src/MeuProjeto.WebApi"
RUN dotnet build "MeuProjeto.WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "MeuProjeto.WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
ENV TZ=America/Sao_Paulo
ENV LANG=pt_BR.UTF-8 \
    LANGUAGE=pt_BR.UTF-8
RUN apk add --no-cache \
    icu-data-full  \
    icu-libs

ENTRYPOINT ["dotnet", "MeuProjeto.WebApi.dll"]