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