Принудительно использовать Entity Framework для использования datetime, а не datetime2 - PullRequest
0 голосов
/ 03 июля 2018

У нас есть EF 6.1, и он преобразует все поля .NET datetime в datetime2 (SQL) при выполнении запроса LINQ to SQL, который не выполняется в определенных сценариях из-за сравнения дат. Есть ли способ заставить EF использовать datetime вместо datetime2. К сведению, столбец в БД - это дата и время. Я видел ответы, заставляющие все datetime использовать datetime2, но не смог найти ничего, что сохранило бы datetime to datetime. Любая конкретная причина, по которой EF преобразует дату и время в дату и время2.

Просто чтобы было более понятно, что в столбце БД указан Datetime, свойства C # объявлены как datetime. Когда EF преобразует запрос LINQ to 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 голосов
/ 18 февраля 2019

Вам необходимо установить пакет Nuget: Microsoft.EntityFrameworkCore.SqlServer. После установки вы можете использовать HasColumnType ("datetime") в вашей собственности. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...