Comment appeler la fonction Scalaire de LINQ to entities côté serveur

J'ai une fonction Scalaire dans ma DB:

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

Je tiens à appeler cette fonction à partir d'une requête LINQ to entities et obtenir le résultat dans une variable:

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

Mais, lorsque j'exécute le code, j'obtiens cette erreur:

LINQ to entities ne reconnaît pas la méthode
'Système.Les données.Objets.ObjectResult`1[Système.Chaîne]
ExecuteFunction[String](Système D'.Chaîne,
Système.Les données.Objets.ObjectParameter[])' méthode, et cette méthode ne peut pas
être traduit dans un magasin d'expression.

Autres Infos:

C'est la partie tous les de une requête en cours d'exécution sur le serveur.
Le retour de toutes les données et à l'aide de LINQ to Objects n'est pas une option en raison de la performance.

Je ne suis pas sûr que j'ai le type de retour de la ExecuteFunction correct, mais je ne suis pas sûr de ce qu'elle pourrait être...
Ce que je fais mal?

Modifier
Avec l'aide de Ladislav Mrnka réponse, voici la solution:

Créer de la méthode d'assistance exposant de la fonction SQL:

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

LINQ doit indiquer:

let result = CustomSqlFunctions.FooFunct("hello world")

OriginalL'auteur mcqwerty | 2011-08-09