Сохранение типа DateTime в БД PostgreSQL (C#)
Доброго времени суток!
Согласно официальной информации из вики по PostgreSQL точность хранения времени в базе составляет 1 microsecond. Но .net хранит наносекунды (100 nanoseconds). Из-за этого получается, что при сохранении типа данных DateTime в timespan (или просто в time) теряется 1 знак.
Если поиск данных с фильтрацией проводить непосредственно ОРМ, то есть шансы, что она сгладит данный факт и найдёт. Но если сначала вытащить данные и затем искать, то разумеется ничего не найдём (т.к. начальные данные изменились).
Возникает вопрос, кто-то сталкивался с данной особенностью и как решал?
Видятся следующие варианты решения проблемы:
- Хранить непосредственно тики (datetime -> long), но придётся каждый раз конвертировать из одного в другое + будет сложно писать запросы непосредственно в sql
- Уменьшать точность временной метки самостоятельно в приложении (например при создании объекта сразу же указывать не DateTime.Now, а DateTime.Now / 1000 * 1000)
- При поиске и сравнении добавлять погрешность
Существуют ли более качественные решения проблемы?