Entity Framework 6 SqlFunctions DateDiff pas implémentée dans le package nuget

Je viens de télécharger les packages nuget pour entity framework 6 (EntityFramework.dll la Version 6.0.0.0 Runtime Version v4.0.30319 et EntityFramework.SqlServer Version 6.0.0.0 Runtime Version v4.0.30319) à mon 4.5 Cadre de la solution (c'est dans plusieurs projets)

Dans l'un des projets que j'ai à la fois la référence et essayé de mettre en œuvre les DateDiff de la Fonction Sql

RepositoryFactory.CreateReadOnly<MyEnity>()
 .Where(at => at.AccessedDate.HasValue 
              && at.CreatedDate >= startDate && at.CreatedDate <= endDate
              && System.Data.Entity.SqlServer.SqlFunctions.DateDiff("ss", at.CreatedDate, at.AccessedDate.Value) > 0)
 .GroupBy(at => at.Participant.Id)
 .Select(at => new TimeOnSite
     {
         TimeSpentInSeconds = at.Sum(p => p.AccessedDate.Value.Subtract(p.CreatedDate).TotalSeconds), 
         ParticipantId = at.Key
     }).ToList();

À ma grande surprise, j'ai reçu un non pris en charge exception lors de l'exécution du code. Quand j'ai regardé à la source, dans System.Data.Entity.SqlServer.SqlFunctions, tous les DateDiff fonctions n'avaient pas de mise en œuvre, ils ne font que jeter de l' NotSupportedExceptions. Un exemple ci-dessous:

    ///<summary>
///Returns the count of the specified datepart boundaries crossed between the specified start date and end date.
///</summary>
///
///<returns>
///The number of time intervals between the two dates.
///</returns>
///<param name="datePartArg">The part of the date to calculate the differing number of time intervals.</param><param name="startDate">The first date.</param><param name="endDate">The second date.</param>
[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "datePartArg")]
[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "endDate")]
[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "startDate")]
[DbFunction("SqlServer", "DATEDIFF")]
public static int? DateDiff(string datePartArg, DateTime? startDate, DateTime? endDate)
{
  throw new NotSupportedException(Strings.ELinq_DbFunctionDirectCall);
}

J'ai aussi essayé d'utiliser System.Data.Linq.SqlClient.SqlMethods.DateDiffSecond qui est mis en œuvre, mais obtenir de l'exception suivante:

LINQ to entities ne reconnaît pas la méthode 'Int32 DateDiffSecond(Système d'.DateTime, Système.DateTime)', et cette méthode ne peut pas être traduit dans un magasin d'expression.

IMO c'est LINQ2SQL fonctionnalité.
Votre base de données est Sql Server ?

OriginalL'auteur Frank M | 2014-04-04