我们所有的代码都在我们的计算机上本地运行(在 8 台以上的机器和新的 Docker 容器中测试)。一旦我们将它部署到 Azure,每次我们尝试获取任何包含日期的数据时,我们都会不断收到以下错误。
抛出的异常:
Can't write CLR type NodaTime.LocalDateTime with handler type TimestampHandler
该列在数据库中具有
timestamp
的类型,我们需要能够将其存储为localdatetime
.
服务器统计:
代码示例:
以下代码用于确保 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