Istnieje niesamowita biblioteka, która pomaga w mapowaniu funkcji bazy danych i procedur składowanych na Entity Framework.
Zainstaluj pakiet Nuget
- Install-Package EntityFramework.Functions
Utwórz metody rozszerzające dla funkcji:
public static class OracleFunctions
{
[Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}
Zmapuj to na swój kontekst EntityFramework:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}
Wywołaj nowo zmapowaną funkcję „ToNumber()” w zapytaniach LINQ:
.FirstOrDefault(p => p.Id == "209706".ToNumber());
I kołysze wujka.
Niestety, w przypadku funkcji Oracle, które znajdują się w innym schemacie, np. UTL_MATCH.EDIT_DISTANCE
to nie zadziała. Powinieneś być w stanie ustawić schemat, ale wygląda na to, że obecnie nie działa z Oracle lub coś takiego. Ale dla innych funkcji, takich jak SOUNDEX
itp. to powinno działać poprawnie.
Możesz przeczytać Dokumentację EntityFramework.Functions tutaj