2015-03-18 4 views
1

У меня возникла проблема с извлечением DateTimeOffset из базы данных PostgreSQL с использованием Entity Framework. Что касается исследования проблемы, я нашел this article, который помогает мне понять, в чем проблема, но я не могу понять, как ее исправить.Как сохранить DateTimeOffset в PostreSQL

У меня есть API, который позволяет пользователям загружать файлы (в основном изображения) и извлекает дату, когда изображение было взято, и сохраняет его в базе данных. Он отлично работает большую часть времени. Однако, если дата находится между 11 мартом на некоторое время в апреле (дата меняется в зависимости от года) до 2007 года он сохраняет в штраф базы данных, но при попытке получить строку, он выдает ошибку:

The UTC Offset of the local dateTime parameter does not match the offset argument.

Я используя тип Timestamp With Time Zone в postgreSQL для поля 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

Похоже, PostgreSQL хранит только временную метку UTC. http://www.postgresql.org/docs/9.1/static/datatype-datetime.html –

+0

Я мог бы отправить код, но я не думаю, что все это будет полезно. В основном я просто делаю Context.Files.Add (файл), а затем Context.Entry (файл) .Reload(). Ошибка перезагружается на Reload(). Я использую Reload, потому что у меня есть серийное поле, которое мне нужно обновить. – GBreen12

ответ

1

Хорошо, это, кажется, быть ошибкой с DateTimeOffset в npgsql или npgsql.EntityFramework. По-видимому, существует несколько других проблем, зарегистрированных в журнале in their issue tracker. В частности, issue #542 довольно близко - но с другим сообщением об исключении.

Предлагаю вам создать новую проблему там, так как они лучше всего помогают диагностировать это дальше.

Смежные вопросы