Der er et fantastisk bibliotek til at hjælpe med at kortlægge databasefunktioner og lagrede procedurer til entitetsramme.
Installer Nuget-pakken
- Install-Package EntityFramework.Functions
Opret udvidelsesmetoder til funktioner:
public static class OracleFunctions
{
[Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}
Kortlæg det på din EntityFramework-kontekst:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}
Kald din nyligt tilknyttede "ToNumber()"-funktion i dine LINQ-forespørgsler:
.FirstOrDefault(p => p.Id == "209706".ToNumber());
Og bobs din onkel.
Desværre for Oracle-funktioner, der ligger i et andet skema, såsom UTL_MATCH.EDIT_DISTANCE
det kommer ikke til at virke. Du formodes at være i stand til at indstille skemaet, men det ser ud til, at det ikke i øjeblikket fungerer med Oracle eller noget. Men for andre funktioner som SOUNDEX
osv. dette burde fungere fint.
Du kan læse dokumentationen for EntityFramework.Functions her