Existe uma biblioteca incrível para ajudar no mapeamento de funções de banco de dados e procedimentos armazenados para o Entity Framework.
Instale o pacote Nuget
- Install-Package EntityFramework.Functions
Crie métodos de extensão para funções:
public static class OracleFunctions
{
[Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}
Mapeie-o no seu contexto EntityFramework:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}
Chame sua função "ToNumber()" recém-mapeada em suas consultas LINQ:
.FirstOrDefault(p => p.Id == "209706".ToNumber());
E balança seu tio.
Infelizmente, para funções Oracle que residem em um esquema diferente, como
UTL_MATCH.EDIT_DISTANCE
isso não vai funcionar. Você deveria ser capaz de definir o esquema, mas parece que não está funcionando atualmente com o Oracle ou algo assim. Mas para outras funções como SOUNDEX
etc. isso deve funcionar bem. Você pode ler a Documentação para EntityFramework.Functions aqui