Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle Entity Framework - Appeler la fonction personnalisée (EDIT_DISTANCE)

Il existe une bibliothèque impressionnante pour aider à mapper les fonctions de base de données et les procédures stockées à Entity Framework.

Installez le paquet Nuget

- Install-Package EntityFramework.Functions

Créer des méthodes d'extension pour les fonctions :

public static class OracleFunctions
{
   [Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
   public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}

Mappez-le sur votre contexte EntityFramework :

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}

Appelez votre fonction "ToNumber()" nouvellement mappée dans vos requêtes LINQ :

.FirstOrDefault(p => p.Id == "209706".ToNumber());

Et bobs ton oncle.

Malheureusement, pour les fonctions Oracle qui résident dans un schéma différent, comme UTL_MATCH.EDIT_DISTANCE ça ne marchera pas. Vous êtes censé pouvoir définir le schéma, mais il semble qu'il ne fonctionne pas actuellement avec Oracle ou quelque chose du genre. Mais pour d'autres fonctions comme SOUNDEX etc. cela devrait fonctionner correctement.

Vous pouvez lire la Documentation pour EntityFramework.Functions ici