У меня возникла проблема с извлечением 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; }
}
Вы можете оставить свой код? –
Похоже, PostgreSQL хранит только временную метку UTC. http://www.postgresql.org/docs/9.1/static/datatype-datetime.html –
Я мог бы отправить код, но я не думаю, что все это будет полезно. В основном я просто делаю Context.Files.Add (файл), а затем Context.Entry (файл) .Reload(). Ошибка перезагружается на Reload(). Я использую Reload, потому что у меня есть серийное поле, которое мне нужно обновить. – GBreen12