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);