Wie nennen skalarwertfunktion von LINQ to Entities-server-Seite

Ich habe ein Skalar-wertige Funktion in meine DB:

ALTER FUNCTION [dbo].[fx_fooFunct]
  (@MyParam varchar(max))
RETURNS varchar(max)
AS
BEGIN
  return @MyParam
END

Ich wollen, rufen Sie diese Funktion über eine LINQ to Entities-Abfrage und das Ergebnis in eine variable:

let result = this.ObjectContext.ExecuteFunction<string>("SELECT dbo.fx_fooFunct(@MyParam)", new ObjectParameter("MyParam", "hello world")).FirstOrDefault()

Aber, wenn ich den code auszuführen, bekomme ich diese Fehlermeldung:

LINQ to Entities erkennt nicht die Methode
'System.Daten.Objekte.ObjectResult`1[System.String]
ExecuteFunction[String](System.String,
System.Daten.Objekte.ObjectParameter [])' - Methode, und diese Methode kann nicht
übersetzt in ein Geschäft Ausdruck.

Weitere Infos:

Dies ist Teil aller von einer Abfrage auf dem server ausgeführt werden.

Rückgabe alle Daten und mithilfe von LINQ to Objects nicht eine option, aufgrund der performance.

Ich bin mir nicht sicher, dass ich den return-Typ der ExecuteFunction richtig, aber ich bin mir nicht sicher, was es sein könnte...
Was mache ich falsch?

Bearbeiten

Mit Hilfe von Mrnka Ladislav s Antwort, hier ist die Lösung:

Erstellen helper-Methode auszusetzen der SQL-Funktion:

public class CustomSqlFunctions
{
    [EdmFunction("MyModel.Store", "fx_fooFunct")]
    public static string FooFunct(string myParam)
    {
        throw new NotSupportedException("Direct calls not supported");
    }
} 

LINQ sollte jetzt lauten:

let result = CustomSqlFunctions.FooFunct("hello world")
InformationsquelleAutor mcqwerty | 2011-08-09
Schreibe einen Kommentar