Hay una biblioteca increíble para ayudar con la asignación de funciones de base de datos y procedimientos almacenados a Entity Framework.
Instale el paquete Nuget
- Install-Package EntityFramework.Functions
Crear métodos de extensión para funciones:
public static class OracleFunctions
{
[Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}
Mapéelo en su EntityFramework Context:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}
Llame a su función "ToNumber()" recién asignada en sus consultas LINQ:
.FirstOrDefault(p => p.Id == "209706".ToNumber());
Y sacude a tu tío.
Desafortunadamente, para las funciones de Oracle que residen en un esquema diferente, como UTL_MATCH.EDIT_DISTANCE
no funcionará. Se supone que debe poder configurar el esquema, pero parece que actualmente no funciona con Oracle o algo así. Pero para otras funciones como SOUNDEX
etc. esto debería funcionar bien.
Puede leer la Documentación para EntityFramework.Functions aquí