C# 如何在PostreSQL中存储DateTimeOffset

C# 如何在PostreSQL中存储DateTimeOffset,c#,entity-framework,postgresql,datetimeoffset,C#,Entity Framework,Postgresql,Datetimeoffset,我在使用实体框架从PostgreSQL数据库检索DateTimeOffset时遇到问题。就研究问题而言,我发现这有助于我理解问题是什么,但我不知道如何解决它 我有一个API,允许用户上传文件(主要是图像),它提取图像拍摄日期并将其存储在数据库中。它大部分时间都很有效。但是,如果日期在2007年之前的3月11日到4月的某个时间(日期因年份而异)之间,则会将其保存到数据库中,但在尝试检索行时,会抛出错误: 本地dateTime参数的UTC偏移量与Offset参数不匹配 我在postgreSQL中为C

我在使用实体框架从PostgreSQL数据库检索
DateTimeOffset
时遇到问题。就研究问题而言,我发现这有助于我理解问题是什么,但我不知道如何解决它

我有一个API,允许用户上传文件(主要是图像),它提取图像拍摄日期并将其存储在数据库中。它大部分时间都很有效。但是,如果日期在2007年之前的3月11日到4月的某个时间(日期因年份而异)之间,则会将其保存到数据库中,但在尝试检索行时,会抛出错误:

本地dateTime参数的UTC偏移量与Offset参数不匹配

我在postgreSQL中为
CameraDate
字段使用带时区的
时间戳。我想不出如何让它正常工作。如果有一种方法可以做到这一点而不改变数据库,那就更好了

示例:

2001-04-01 10:47:17-06工程
2001-03-01 10:47:17-06工程
2001-03-13 10:47:17-06不起作用
2007-03-13 10:47:17-06工程
这是我的密码:

Context.Files.Add(file);
Context.Entry(file).Reload();
文件类如下所示(为了简洁起见,删除了一些字段):


好的,这似乎是npgsql或npgsql.EntityFramework中带有
DateTimeOffset
的错误。似乎还记录了其他几个问题。特别是非常接近,但有一个不同的异常消息


我建议您在那里创建一个新问题,因为它们是帮助进一步诊断此问题的最佳工具。

您可以发布代码吗?看起来PostgreSQL只在内部存储UTC时间戳。我可以发布代码,但我不认为这会有多大帮助。基本上我只是在做一个Context.Files.Add(文件),然后是Context.Entry(文件).Reload()。重新加载()时引发错误。我使用重新加载是因为我有一个需要更新的串行字段。对于
DateTimeOffset
,您应该在postgres中使用带有时区的
时间戳。但是由于你没有发布任何代码,我所能做的就是发表评论并投票关闭。谢谢你的编辑,我删除了我的关闭投票。您还可以告诉我们您的postgres数据库中的
CameraDate
字段是什么数据类型吗?Pgsql的开发人员目前似乎建议不要使用
DateTimeOffset
和带时区的
时间戳。请参见以此开头的讨论
public class File
{
    [Column("FileId")]
    public override Guid ID { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DisplayId { get; set; }
    public DateTimeOffset? CameraDate { get; set; }
}