Det finns ett fantastiskt bibliotek som hjälper dig att kartlägga databasfunktioner och lagrade procedurer till Entity Framework.
Installera Nuget-paketet
- Install-Package EntityFramework.Functions
Skapa tilläggsmetoder för funktioner:
public static class OracleFunctions
{
[Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}
Kartlägg det på din EntityFramework-kontext:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}
Anropa din nyligen mappade "ToNumber()"-funktion i dina LINQ-frågor:
.FirstOrDefault(p => p.Id == "209706".ToNumber());
Och guppar på din farbror.
Tyvärr, för Oracle-funktioner som finns i ett annat schema, som UTL_MATCH.EDIT_DISTANCE
det kommer inte att fungera. Du ska kunna ställa in schemat, men det verkar som om det för närvarande inte fungerar med Oracle eller något. Men för andra funktioner som SOUNDEX
etc. detta borde fungera bra.
Du kan läsa dokumentationen för EntityFramework.Functions här