强制实体框架使用 datetime 而非 datetime2
Posted
技术标签:
【中文标题】强制实体框架使用 datetime 而非 datetime2【英文标题】:Enforce Entity Framework to use datetime than datetime2 【发布时间】: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'
谢谢, 单位
【问题讨论】:
How do I force Entity Framework to use datetime instead of datetime2, during DateTime comparison?的可能重复 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 好)。 @bubiDateTime2
is 比 DateTime
好,这就是原因 1:它(可以)使用更少的存储空间。 2:DateTime
有一个错误,隐式转换字符串文字格式yyyy-MM-dd HH:mm:ss
,而DateTime2
没有。 3. if 可以有更高(或更低)的精度。 4. 支持更大的日期范围(1753年之前的日期)
【参考方案1】:
您需要安装 Nuget 包:Microsoft.EntityFrameworkCore.SqlServer。安装后,您可以在属性中使用 HasColumnType("datetime")。 :)
【讨论】:
以上是关于强制实体框架使用 datetime 而非 datetime2的主要内容,如果未能解决你的问题,请参考以下文章
mybatis 怎么在 sql的datetime 和 实体类的date做比较