Ich verwende Entity Framework 4.1 RC und code first approach. Wie kann ich benutzerdefinierte SQL-Funktionen aufrufen?
Wenn ich das Attribut EdmFunction verwende, welchen Namespace sollte ich angeben?
%Vor%Wenn ich versuche, eine LINQ-Abfrage mit einer solchen Funktion auszuführen, wird die folgende Ausnahme ausgelöst:
Die angegebene Methode '...' für den Typ '...' kann nicht in ein LINQ übersetzt werden Entitäten speichern Ausdruck.
Wenn Sie die SQL-Funktion aufrufen möchten, müssen Sie eine benutzerdefinierte SQL-Abfrage ausführen. Verwenden Sie dazu context.Database.SqlQuery. Das Entitätsframework unterstützt die Zuordnung gespeicherter Prozeduren, diese Funktion wird jedoch in der DbContext-API (EF 4.1) nicht unterstützt. Wenn Sie eine gespeicherte Prozedur aufrufen möchten, müssen Sie erneut context.Database.SqlQuery verwenden. Gespeicherte Prozeduren können niemals in Linq-Abfragen verwendet werden.
EdmFunction
ist ein Feature der ObjectContext-API und des Entity-Designers. Der Namespace wird auf den Namespace festgelegt, der in der EDMX-Datei definiert ist. Wenn Sie Code-First verwenden, haben Sie die EDMX-Datei nicht und Sie können die Funktionszuordnung nicht definieren.
Übrigens. Wenn Sie dem ersten Ansatz des Codes folgen, sollten Sie keine gespeicherten Prozeduren oder SQL-Funktionen haben, da die Datenbank von Ihrem Modell (Code) definiert und vom Entitätsframework generiert wird.
Ab EF 6.1 ist es jetzt möglich, Funktionen zu mappen, da jetzt der Zugriff auf das EDM von Code First aus möglich ist.
Hier ist ein Beispiel einer Implementierung, die es ermöglicht, TVFs und Stored Procedures zu mappen, jedoch mit einigen Einschränkungen. Es verwendet auch benutzerdefinierte Konventionen von EF 6.
Hoffentlich gibt es bald weitere Komplettlösungen:
HINWEIS: Sie können git verwenden, um den Code auf Ihren Computer zu kopieren und ihn zu modifizieren / verbessern
Tags und Links .net entity-framework entity-framework-4.1