强制实体框架使用日期时间而不是 datetime2

Pun*_*nit 5 .net c# linq datetime entity-framework

我们有 EF 6.1,它在执行 LINQ to SQL 查询时将所有 .NET 日期时间字段转换为 datetime2(SQL),但由于日期比较,这在某些情况下会失败。有没有一种方法可以强制 EF 使用 datetime 而不是 datetime2。仅供参考,数据库中的列是日期时间。我已经看到强制所有日期时间使用 datetime2 的答案,但找不到任何将日期时间保持为日期时间的内容。EF 将 datetime 转换为 datetime2 的任何特定原因。

只是为了更清楚地说明 DB 列中是日期时间,C# 属性被声明为日期时间。当 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'
Run Code Online (Sandbox Code Playgroud)

谢谢,普尼特

Raf*_*lho 1

您需要安装Nuget包:Microsoft.EntityFrameworkCore.SqlServer。安装后,您可以在属性中使用 HasColumnType("datetime") 。:)