强制实体框架使用datetime而不是datetime2

时间:2018-07-02 21:08:56

标签: c# .net entity-framework linq datetime

我们有EF 6.1,在执行LINQ to SQL查询时,它将所有.NET datetime字段转换为datetime2(SQL),由于日期比较,在某些情况下该操作失败。有没有一种方法可以强制EF使用datetime而不是datetime2。 DB中的FYI列为日期时间。我已经看到了强制所有日期时间都使用datetime2的答案,但是找不到将datetime保留为datetime的任何内容。 EF将datetime转换为datetime2的任何特殊原因。

为了更清楚一点,在DB列中为Datetime,将C#属性声明为datetime。当EF将LINQ转换为SQL查询时,它发送特定的datetime字段作为datetime2而不是datetime。 Edate和Pdate列是datetime,我通过了一个带有datetime值的过滤条件,但是当我在探查器中看到它时,它将转换为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'

谢谢, Punit

1 个答案:

答案 0 :(得分:0)

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