Я пытаюсь отобразить тип NodaTime OffsetDateTime
на SQL Server, но я не уверен, как решить импеданс между типами OffsetDateTime
и NDST SQL Server DateTimeOffset
.Использование OffsetDateTime с NHibernate
Основная проблема, с которой я столкнулся, заключается в том, что LINQ поддерживает правильную работу, поскольку OffsetDateTime
не имеет операторов сравнения, таких как <
. Системы также отличаются тем, как они справляются с равенством. NodaTime рассматривает как мгновенное время, так и смещение, в то время как SQL Server учитывает только момент времени.
2015-12-24 11:18+01:00
и 2015-12-24 10:18+00:00
считаются равными в SQL Server, но не равны в NodaTime.
Я рассмотрел использование ICompositeUserType
для хранения даты/времени UTC и смещения в отдельных столбцах (аналогично предыдущему SQL Server 2008), но OffsetDateTime
не имеет свойства UTC/Instant. Поэтому я не вижу, как получить date.ToInstant()
в запросах LINQ, чтобы правильно отобразить свойство в ICompositeUserType
.
Во-первых, Что вы пытаетесь сделать? Если вы преобразуете оба значения в моменты NodaTime, они * будут * равны - они относятся к одному и тому же моменту. Вы действительно хотите, чтобы они вели себя как разные ценности? –
Во-вторых, NHibernat * отображает * ваши классы в * базу данных *. Вы не можете использовать семантику, которая не поддерживается типом базы данных. LINQ или любой ORM не меняют функциональность базы данных, они просто упрощают сопоставление между объектами и таблицами. Любое другое использование - серьезный запах –
Я хочу использовать тип «OffsetDateTime» NodaTime в своих моделях и сопоставлять их с SQL Server «DateTimeOffset» или с двумя столбцами, «DateTime» сохраняет значение UTC и смещение. –