Existuje úžasná knihovna, která pomáhá s mapováním databázových funkcí a uložených procedur na Entity Framework.
Nainstalujte balíček Nuget
- Install-Package EntityFramework.Functions
Vytvořte metody rozšíření pro funkce:
public static class OracleFunctions
{
[Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}
Namapujte jej na svůj kontext EntityFramework:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}
Zavolejte svou nově namapovanou funkci "ToNumber()" ve svých dotazech LINQ:
.FirstOrDefault(p => p.Id == "209706".ToNumber());
A švihá svého strýce.
Bohužel pro funkce Oracle, které jsou umístěny v jiném schématu, jako je UTL_MATCH.EDIT_DISTANCE
to nebude fungovat. Předpokládá se, že budete schopni nastavit schéma, ale zdá se, že aktuálně nefunguje s Oracle nebo tak něco. Ale pro další funkce jako SOUNDEX
atd. to by mělo fungovat dobře.
Dokumentaci k EntityFramework.Functions si můžete přečíst zde