Има страхотна библиотека, която да ви помогне с картографирането на функциите на базата данни и съхранените процедури към Entity Framework.
Инсталирайте пакета Nuget
- Install-Package EntityFramework.Functions
Създаване на методи за разширение за функции:
public static class OracleFunctions
{
[Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}
Картирайте го във вашия контекст на EntityFramework:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}
Обадете се на вашата новокартирана функция „ToNumber()“ във вашите LINQ заявки:
.FirstOrDefault(p => p.Id == "209706".ToNumber());
И клати чичо ти.
За съжаление, за функции на Oracle, които се намират в различна схема, като UTL_MATCH.EDIT_DISTANCE
няма да проработи. Предполага се, че можете да зададете схемата, но изглежда, че в момента не работи с Oracle или нещо подобно. Но за други функции като SOUNDEX
и т.н. това трябва да работи добре.
Можете да прочетете Документацията за EntityFramework.Functions тук