Erreur lors de l'import de la fonction SQL Server dans Entity Framework ADO.NET Entity Data Model

Mon projet est basé sur ADO.NET Entity Data Model et j'utilise Entity Framework 6.0.

Eh bien, j'ai reçu cette erreur quand j'importe la fonction dans mon projet:

Erreur 6046: Impossible de générer le type de return d'import de fonction de la fonction de magasin 'fn_PWDCOMPARE'. La fonction de magasin sera ignorée et l'import de la fonction ne sera pas générée.

Je ne reçois pas d'erreur si j'importe une procédure.

La fonction est:

CREATE FUNCTION fn_PWDCOMPARE (@pwd NVARCHAR(MAX),@pwdhash NVARCHAR(MAX)) RETURNS BIT BEGIN RETURN PWDCOMPARE(@pwd, @pwdhash) END 

EF 6.1.3 ne génère toujours pas de code pour les fonctions scalaires. Cela dit, vous pouvez étendre votre class DbContext et append votre propre implémentation à votre fonction. Ensuite, vous pouvez appeler votre fonction comme tout autre object dans votre model EF.

Créez un file contenant une [class partielle] sur le même [espace de nom] que votre model de database et avec le même nom de context de model. Et ajoutez ce code:

 public partial class YourDBContext : DbContext { public System.Data.Entity.Core.Objects.ObjectContext AsObjectContext() { return (this as System.Data.Entity.Infrastructure.IObjectContextAdapter).ObjectContext; } [DbFunction("YourDBModel.Store", "fn_PWDCOMPARE")] public bool fn_PWDCOMPARE(ssortingng pwd, ssortingng pwdhash) { var paramList = new ObjectParameter[] { new ObjectParameter("pwd", pwd), new ObjectParameter("pwdhash", pwdhash) }; return this.AsObjectContext().CreateQuery<bool>("YourDBModel.Store.fn_PWDCOMPARE", paramList).Execute(MergeOption.NoTracking).FirstOrDefault(); } 

Ensuite, vous appelez simplement cette nouvelle fonction à partir de votre code:

bool retVal = YourDBContext.fn_PWDCOMPARE (passe, hash);