我在使用Entity Framework从PostgreSQL数据库中检索DateTimeOffset
时遇到了问题。就研究问题而言,我发现this article可以帮助我理解问题所在,但我不知道如何解决它。
我有一个API,它允许用户上传文件(主要是图像),它提取图像拍摄的日期并将其存储在数据库中。它在大多数情况下都很好用。但是,如果日期在2007年之前的3月11日到4月的某个时候(日期因年份而异),它会保存到数据库中,但当试图检索该行时,它会抛出错误:
本地dateTime参数的UTC偏移量与偏移量参数不匹配。
我在PostgreSQL中使用Timestamp With Time Zone
类型作为CameraDate
字段。我不知道如何让它正确工作。如果有一种方法可以在不改变数据库的情况下做到这一点,那就更好了。
示例如下:
2001-04-01 10:47:17-06 Works
2001-03-01 10:47:17-06 Works
2001-03-13 10:47:17-06 Doesn't work
2007-03-13 10:47:17-06 Works
字符串
下面是我的代码:
Context.Files.Add(file);
Context.Entry(file).Reload();
型
文件类看起来像这样(一些字段被删除):
public class File
{
[Column("FileId")]
public override Guid ID { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DisplayId { get; set; }
public DateTimeOffset? CameraDate { get; set; }
}
型
2条答案
按热度按时间lf3rwulv1#
好的,这似乎是npgsql或npgsql. quantityFramework中
DateTimeOffset
的一个错误。in their issue tracker似乎记录了其他几个问题。特别是issue #542非常接近-但有不同的异常消息。我建议你在那里创建一个新的问题,因为他们是最好的帮助进一步诊断这个问题。
nwlls2ji2#
要在PostreSQL中存储DateTimeOffset,您应该将其转换为通用时间:
public int getName();
请Review issue 4176
通过使用DateTimeOffset的值转换器与EF核心6.0进行集成。最近,EF核心引入了批量配置值转换器,我们正在利用它。https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions?tabs=data-annotations#bulk-configuring-a-value-converter
字符串
在DbContext中覆盖
型