如何在PostgreSQL中存储DateTimeOffset

时间:2015-03-18 16:13:05

标签: c# entity-framework postgresql datetimeoffset

我在使用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; }
}

1 个答案:

答案 0 :(得分:2)

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

我建议您在那里创建一个新问题,因为他们最好帮助进一步诊断。