Ich habe eine skalare User Defined Function im SQL-Server und möchte diese über das Entity Framework aufrufen. Die Function habe ich dem Entity-Model hinzugefügt. Im Vergleich zu einer Stored Procedure kann eine Function nicht gemappt werden. Somit gibt es auch kein "Function Import". Wie wird die Function nun aufgerufen? Ich habe folgenden Hinweis gefunden: Calling UDFs from Entity Framework - Not what you might have expected. Das klingt plausibel, aber ich weiß immer noch nicht, wie der Aufruf auszusehen hat. Wer hilft?
Nachschlag: Nach Erzeugen des EnityContext (hier wird auch die Connection zur Datenbank erzeugt) mache ich folgenden Aufruf:
entityContext.ExecuteFunction("FnUdfXy", new ObjectParameter("parameter1", parameter1), new ObjectParameter("parameter2", parameter2));
und erhalte aus o.g. Gründen den Fehler: The FunctionImport 'FnUdfXy' could not be found in the container 'Entities'.
Nachschlag2: Mit ObjectQuery könnte es gehen:
var query = new ObjectQuery<decimal>("Model.Store.FnUdfXy(@parameter1, @parameter2)", entityContext);
// Add parameters to the collection. query.Parameters.Add(new ObjectParameter("parameter1", parameter1)); query.Parameters.Add(new ObjectParameter("parameter2", parameter2));
Nun erhalte ich die Fehlermeldung: "DbLimitExpression requires a collection argument. Parameter name: argument" Was hat es damit auf sich? Bin ich auf dem richtigen Weg?
Nachschlag3: Ein einfaches
var result = query.Execute(MergeOption.NoTracking);
hat noch gefehlt.
Endlich läuft die UDF und ich hatte hier eine schöne Konversation mit mir selbst :)