Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle Entity Framework - Benutzerdefinierte Funktion aufrufen (EDIT_DISTANCE)

Es gibt eine großartige Bibliothek, die beim Zuordnen von Datenbankfunktionen und gespeicherten Prozeduren zu Entity Framework hilft.

Installieren Sie das Nuget-Paket

- Install-Package EntityFramework.Functions

Erstellen Sie Erweiterungsmethoden für Funktionen:

public static class OracleFunctions
{
   [Function(FunctionType.BuiltInFunction, "TO_NUMBER")]
   public static int? ToNumber(this string value) => Function.CallNotSupported<int?>();
}

Ordnen Sie es Ihrem EntityFramework-Kontext zu:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Conventions.Add(new FunctionConvention(typeof(OracleFunctions)));
}

Rufen Sie Ihre neu zugeordnete „ToNumber()“-Funktion in Ihren LINQ-Abfragen auf:

.FirstOrDefault(p => p.Id == "209706".ToNumber());

Und wiegt deinen Onkel.

Leider für Oracle-Funktionen, die sich in einem anderen Schema befinden, wie UTL_MATCH.EDIT_DISTANCE es wird nicht funktionieren. Sie sollten in der Lage sein, das Schema festzulegen, aber es scheint, als ob es derzeit nicht mit Oracle oder so funktioniert. Aber für andere Funktionen wie SOUNDEX etc. das sollte gut funktionieren.

Sie können die Dokumentation für EntityFramework.Functions hier lesen