【发布时间】:2015-12-24 12:24:32
【问题描述】:
我正在尝试将 NodaTime 的 OffsetDateTime 类型映射到 SQL Server,但我不确定如何解决 NodaTime 的 OffsetDateTime 和 SQL Server 的 DateTimeOffset 类型之间的阻抗。
我遇到的主要问题是让 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 属性。因此,我看不到如何在 LINQ 查询中获取 date.ToInstant() 以正确映射到 ICompositeUserType 中的属性。
【问题讨论】:
-
首先,你想做什么?如果您将两个值都转换为 NodaTime 瞬间,它们将相等 - 它们确实指的是同一个瞬间。你真的希望它们表现出不同的价值吗?
-
第二,NHibernat 映射你的类到数据库。您不能使用数据库类型不支持的语义。 LINQ 或任何 ORM 不会改变数据库的功能,它们只是使对象和表之间的映射更容易。任何其他用途都是严重的气味
-
我想在我的模型中使用 NodaTime 的
OffsetDateTime类型并将它们映射到 SQL Server 的DateTimeOffset或 2 列,DateTime存储 UTC 值和偏移量。跨度>
标签: nhibernate nodatime