Я разработал приложение Asp.net, которое использует платформу Entity для подключения к базе данных Sql Server 2008 (не R2).
Клиент запускает сценарий db для базы данных Sql server 2008 R2 , и он успешно выполнен.
Когда приложение выполняется, выдается исключение:
«Sysutcdatetime» не распознается как встроенная функция.
После проверки трассировки стека оказалось, что исключение выдается при выполнении оператора инфраструктуры LINQ to Entity. Заявление примерно так:
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > DateTime.UtcNow);
Насколько я понимаю, сгенерированный SQL-оператор из Entity Framework использует функцию Sysutcdatetime для получения текущей даты и времени UTC.
Я знаю, что одно из решений заключается в том, чтобы сохранить дату в переменной, а затем передать ее в лямбда-выражение, таким образом, дата и время UTC будут определены на уровне приложения и жестко закодированы в сгенерированном выражении SQL.
var currentUtcDate = DateTime.UtcNow;
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > currentUtcDate);
Но мне любопытно, почему функция Sysutcdatetime существует в Sql server 2008, а не в Sql server 2008 R2?