Как заставить LINQ to SQL передавать .NET DateTime как datetime2? - PullRequest
2 голосов
/ 14 июля 2010

У меня есть простой запрос в LINQ to SQL:

var id = 23479824;
var date = Changes.Where(ch => ch.Id == id).First().Date;
var diff = Changes.Where(ch => ch.Id == id).Select(ch => SqlMethods.DateDiffNanosecond(date, ch.Date)).First();

Переменная diff должна быть нулевой, однако это не так. Сгенерированный SQL выглядит следующим образом:

DECLARE @p0 DateTime = '2010-07-14 15:05:49.207'
DECLARE @p1 Int = 44633

SELECT TOP (1) [t1].[value]
FROM (
    SELECT DATEDIFF(Nanosecond, @p0, [t0].[Date]) AS [value], [t0].[Id]
    FROM [dbo].[Changes] AS [t0]
    ) AS [t1]
WHERE [t1].[Id] = @p1
GO

Я обнаружил, что это вызвано тем, что LINQ to SQL передает тип .NET DateTime как SQL datetime. Однако столбец Date имеет тип SQL datetime2.

Это ошибка в LINQ to SQL или функция? Как заставить LINQ to SQL передавать введенную дату как datetime2?

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Откройте файл .dbml и выберите свойство (Changes.Date).

Откройте страницу свойств (Alt-Enter).Существует свойство «Тип данных сервера», которое вы можете изменить.

Сохранить и перестроить.

1 голос
/ 14 июля 2010

Если вы не против надеть капюшон, вы можете сделать это:

DbCommand dbCommand = dataContext.GetCommand(query);

dbCommand.Parameters ...

dbParameter.DbType = System.Data.DbType.DateTime2;

DbDataReader reader = command.ExecuteReader();

IEnumerable<ResultType> result = dataContext
  .Translate<ResultType>(reader);
...