Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle Entity Framework - Chamar função personalizada (EDIT_DISTANCE)


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