我有一個使用物體框架的 .NET 6 Web API。一些端點接收包含 datetimeoffset 屬性的物件,傳入的值采用本地日期時間的形式。
問題是,對于最新版本的 PostgreSql,datetimeoffset 值只能采用 ...T 00 UTC 格式的 datetimeoffset 輸入。因此,當我的值類似于 ...T 03 時,我無法將其寫入資料庫。
這是我的模型課
public class MyModel : BaseEntity
{
public DateTimeOffset MyDate { get; set; }
}
這是我的 dto 課
public class Dto : BaseDto
{
public DateTimeOffset MyDate { get; set; }
}
臨時解決方案
現在,我每次在我的服務類中發布到資料庫和從資料庫中獲取時都會更改格式,如下所示:
對于帖子:
myDto.MyDate = myDto.MyDate.UtcDateTime;
var myModel = _mapper.Map<MyModel>(myDto);
await _unitOfWork.MyModelContext.CreateAsync(myModel);
await _unitOfWork.SaveAsync();
//...
忘記:
var myModels = await _unitOfWork.MyModelContext.GetAll();
foreach(var myModel in myModels)
myModel.MyDate = myModel.MyDate.LocalDateTime;
//...
//or
var myModel = await _unitOfWork.MyModelContext.GetById(id);
myModel.MyDate = myModel.MyDate.LocalDateTime;
//...
我知道這是一個糟糕的方法。我想知道是否可以在我的 Dtos 或模型中進行此操作,以便我不需要對每個服務進行此操作。
我也愿意接受其他建議。
uj5u.com熱心網友回復:
您需要創建一個自定義型別轉換器,如下所示。
public class DateTimeOffSetTypeConverter : ITypeConverter<DateTimeOffset, DateTimeOffset>
{
public DateTimeOffset Convert(DateTimeOffset source, DateTimeOffset destination, ResolutionContext context)
{
destination = source.UtcDateTime;
return destination;
}
}
然后在您的映射配置類中定義它。
var configuration = new MapperConfiguration(cfg => {
cfg.CreateMap<DateTimeOffset, DateTimeOffset>().ConvertUsing(new DateTimeOffSetTypeConverter());
//your mapping configurations
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382563.html
標籤:C# PostgreSQL的 asp.net核心 约会时间 实体框架核心
