Gewusst wie: Aufrufen einer benutzerdefinierten Funktion (Entity Framework)
Entity SQL ermöglicht Ihnen, in einer Abfrage benutzerdefinierte Funktionen aufzurufen. Sie können diese Funktionen innerhalb der Abfrage oder als Teil des konzeptionellen Modells definieren. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen (Entity SQL).
Das Beispiel in diesem Thema beruht auf dem Adventure Works Sales-Modell. Zum Ausführen des Codes in diesem Thema muss dem Projekt bereits das Adventure Works Sales-Modell hinzugefügt und das Projekt zur Verwendung von Entity Framework konfiguriert worden sein. Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Assistenten für Entity Data Model (Entity Framework) bzw. Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren eines Entity Data Model (Entity Framework).
Beispiel
Im folgenden Beispiel wird eine Funktion mit dem Namen OrderTotal in einer Entity SQL-Abfrage definiert. Diese Funktion akzeptiert ein SalesOrderHeader-Objekt und berechnet die Gesamtsumme, indem sie die Werte der Eigenschaften SubTotal, TaxAmt und Freight addiert. Diese Funktion wird dann in der Abfrageprojektion aufgerufen, um den neu berechneten TotalDue-Wert mit dem von der Datenquelle zurückgegebenen TotalDue-Wert zurückzugeben. Der USING-Operator ist zur Angabe des Namespaces des SalesOrderHeader-Objekts erforderlich, das der Funktion übergeben wurde.
' Query that calls the OrderTotal function to recalculate the order total.
Dim queryString As String = "USING Microsoft.Samples.Entity;" & _
" FUNCTION OrderTotal(o SalesOrderHeader) AS (o.SubTotal + o.TaxAmt + o.Freight)" & _
" SELECT order.TotalDue AS currentTotal, OrderTotal(order) AS calculated" & _
" FROM AdventureWorksEntities.SalesOrderHeaders AS order WHERE order.Contact.ContactID = @customer"
Dim customerId As Integer = 364
Using context As New AdventureWorksEntities()
Dim query As New ObjectQuery(Of DbDataRecord)(queryString, context)
query.Parameters.Add(New ObjectParameter("customer", customerId))
For Each rec As DbDataRecord In query
Console.WriteLine("Order Total: Current - {0}, Calculated - {1}.", rec(0), rec(1))
Next
End Using
// Query that calls the OrderTotal function to recalculate the order total.
string queryString = @"USING Microsoft.Samples.Entity;
FUNCTION OrderTotal(o SalesOrderHeader) AS
(o.SubTotal + o.TaxAmt + o.Freight)
SELECT [order].TotalDue AS currentTotal, OrderTotal([order]) AS calculated
FROM AdventureWorksEntities.SalesOrderHeaders AS [order]
WHERE [order].Contact.ContactID = @customer";
int customerId = 364;
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(queryString, context);
query.Parameters.Add(new ObjectParameter("customer",customerId));
foreach (DbDataRecord rec in query)
{
Console.WriteLine("Order Total: Current - {0}, Calculated - {1}.",
rec[0], rec[1]);
}
}
Siehe auch
Aufgaben
Gewusst wie: Aufrufen von im Modell definierten Funktionen in Abfragen (LINQ to Entities)
Konzepte
Benutzerdefinierte Funktionen (Entity SQL)
Weitere Ressourcen
How to: Define Custom Functions in the Conceptual Model
How to: Define Custom Functions in the Conceptual Model