【发布时间】:2018-07-02 21:08:55
【问题描述】:
我们有 EF 6.1,它在执行 LINQ to SQL 查询时将所有 .NET 日期时间字段转换为 datetime2(SQL),这在某些情况下由于日期比较而失败。有没有一种方法可以强制 EF 使用 datetime 而不是 datetime2。 DB 中的 FYI 列是日期时间。我已经看到强制所有日期时间使用 datetime2 的答案,但找不到任何将日期时间保持为日期时间的东西。 EF 将 datetime 转换为 datetime2 的任何特殊原因。
为了更清楚地说明,在 DB 列中是 Datetime,C# 属性被声明为 datetime。当 EF 将 LINQ 转换为 SQL 查询时,它将特定的日期时间字段作为 datetime2 而不是 datetime 发送。列 Edate 和 Pdate 是日期时间,我传递了一个带有日期时间值的过滤条件,但是当我在分析器中看到它时,它被转换为 datetime2。
exec sp_executesql N'SELECT TOP (1)
[Project1].[ID] AS [ID]
FROM ( SELECT
[Extent2].[ID] AS [ID]
FROM [DBO].[TableB] AS [Extent1]
INNER JOIN [DBO].[TableA] AS [Extent2] ON [Extent1].[ID] = [Extent2].[ID]
WHERE ([Extent2].[EDate] <= @p__linq__1) AND ([Extent1].[Pdate] > @p__linq__2)
) AS [Project1]
ORDER BY [Project1].[DateP] DESC',N'@p__linq__1 datetime2(7),@p__linq__2 datetime2(7)',
@p__linq__1='2018-06-24 16:43:34.7830000',@p__linq__2='2018-06-24 16:43:34.7830000'
谢谢, 单位
【问题讨论】:
-
Datetime2 是比 DateTime 更好的数据类型。其实you shouldn't use DateTime again, ever.
-
@WoIIe 谢谢正如我之前所说,那篇特定的文章谈到从 datetime 到 datetime2 的强制执行,在我的情况下,我们希望将 datetime 保留到 datetime 并且不让 EF 使用 datetime2。
-
EF 6 将 DateTime 映射到 SQL Server 日期时间,因此您的问题可能有所不同。 BTW datetime2 并不比 datetime 好(因为 float(53) 并不比 real 好)。
-
@bubi
DateTime2is 比DateTime好,这就是原因 1:它(可以)使用更少的存储空间。 2:DateTime有一个错误,隐式转换字符串文字格式yyyy-MM-dd HH:mm:ss,而DateTime2没有。 3. if 可以有更高(或更低)的精度。 4. 支持更大的日期范围(1753年之前的日期)
标签: c# .net entity-framework linq datetime