System.InvalidCastException:无法使用处理程序类型 TimestampHandler 编写 CLR 类型 NodaTime.LocalDateTime

问题描述 投票:0回答:0

我们所有的代码都在我们的计算机上本地运行(在 8 台以上的机器和新的 Docker 容器中测试)。一旦我们将它部署到 Azure,每次我们尝试获取任何包含日期的数据时,我们都会不断收到以下错误。

抛出的异常:

Can't write CLR type NodaTime.LocalDateTime with handler type TimestampHandler

该列在数据库中具有

timestamp
的类型,我们需要能够将其存储为
localdatetime
.

服务器统计:

  • Linux
  • .NET 7.0

依赖关系

代码示例:

以下代码用于确保 NodaTime 日期的映射。

db.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"), opt => {
        opt.UseNodaTime();
});

获取数据的例子,抛出异常:

public async Task<List<Booking>> GetBookings(LocalDate from, LocalDate to) {
        var fromDate = new LocalDateTime().FromLocalDateAndLocalTime(from, LocalTime.MinValue);
        var toDate = new LocalDateTime().FromLocalDateAndLocalTime(from, LocalTime.MaxValue);
        
        var bookings = _db.Rentals
            .Include(r => r.Product)
            .Where(r => r.Status != RentalStatus.Rejected)
            .Where(r => (r.PickupAt >= fromDate && 
                         r.PickupAt <= toDate || 
                        (r.ReturnAt >= fromDate && 
                         r.ReturnAt <= toDate)))
            .Select(r => new Booking() {
                Product = r.Product!,
                Rental = r,
                From = r.PickupAt,
                To = r.ReturnAt
            });

        return await bookings.ToListAsync();
    }

再一次,一切正常,直到我们部署它。所以我们希望有人对它可能是什么提出建议。所有其他 API 调用都按预期工作,仅当涉及到此日期检索时。如果我们在本地启动它并使用完全相同的数据库,它不会抛出异常。

编辑: 根据 Jon 的回复,我正在更新问题。

我们使用

PostgreSQL 14.6
作为数据库。

我们一直在关注以下文档: https://www.npgsql.org/doc/types/nodatime.html?tabs=datasource

建议的列类型应为:

c# entity-framework asp.net-core clr nodatime
© www.soinside.com 2019 - 2024. All rights reserved.