Entity Framework 4 – Die Zeiten im Griff mit SqlFunctions
Letztes Jahr hatte ich mich in diesen Beitrag mit den Zeitfunktionen im Entity Framework auseinandergesetzt. Das Hauptproblem war die Verwendung von DateTime-Methoden in Kombination mit Linq-Abfragen. In Linq to SQL funktioniert das problemlos, während das Entity Framework eine NotSupportedException auslöst. Das Problem ist hier einmal mehr die Erwartungskonfirmintät, man kommt also nicht um das lesen der Dokumentation herum.
Für das beschriebene Szenario ist im Entity Framework die Klasse SqlFunctions aus dem Namensraum System.Data.Objects.SqlClient gedacht.
Ein kleines Beispiel, wie die Abfrage im Entity Framework aussieht:
var list = from t in ctx.Tasks
where t.DueDate == SqlFunctions.DateAdd("d", t.ReminderSignal, DateTime.Today)
select t;
Beispiel mit SqlFunctions (C#)
Für mich ist diese Form der Verwendung immer noch gewöhnungsbedürftig, aber es ist ein Weg die Datumsfunktionen innerhalb der Abfragen verwenden zu können.
Ein gravierender Nachteil bei der Verwendung von SqlFunctions ist die Abhängigkeit zum Provider, da die Funktionen auf den Sql Server ausgelegt sind. Wird die gleiche Abfrage bspw. gegen einen MySQL-Server gerichtet (MySQLConnector 6.3.6), so erhält man folgende Fehlermeldung:
Die angegebene Methode 'System.Nullable`1[System.DateTime] DateAdd(System.String, System.Nullable`1[System.Double], System.Nullable`1[System.DateTime])' in Typ 'System.Data.Objects.SqlClient.SqlFunctions' kann nicht in einen Speicherausdruck für 'LINQ to Entities' übersetzt werden.
Eigentlich schade...
- 0 Kommentar(e)


Mein Kommentar