J'ai développé une application Asp.net qui utilise Entity Framework pour se connecter à une base de données Sql Server 2008 (et non R2).
Le client exécute le script db sur une base de données SQL Server R2 et il a été exécuté avec succès.
Lorsque l'application est exécutée, une exception est levée:
'Sysutcdatetime' n'est pas reconnu comme fonction intégrée.
Après avoir vérifié la trace de la pile, il est apparu que l'exception est levée lorsqu'une instruction de structure LINQ to Entity est exécutée. La déclaration est quelque chose comme ceci:Sysutcdatetime dans Sql Server 2008 R2, est-il obsolète?
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > DateTime.UtcNow);
Pour autant que je comprends, l'instruction SQL généré par Entity Framework utilise la fonction Sysutcdatetime pour obtenir la date UTC et l'heure actuelle.
Je sais que l'une des solutions consiste à stocker la date dans une variable plutôt que de la passer à l'expression lambda, ainsi la date et l'heure UTC seront déterminées au niveau de l'application et codées en dur dans l'instruction sql générée.
var currentUtcDate = DateTime.UtcNow;
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > currentUtcDate);
Mais je suis curieux de savoir pourquoi la fonction Sysutcdatetime existe dans le serveur SQL Server 2008 et non dans le serveur SQL Server 2008 R2?
J'ai vérifié en utilisant Sql server management studio sur System Functions -> Fonctions de date et d'heure et il n'existe pas. Je n'ai pas accès maintenant pour vérifier à nouveau en utilisant l'instruction sql. –