Procedura: chiamare una funzione definita dall'utente (Entity Framework)
Entity SQL consente di chiamare funzioni definite dall'utente. È possibile definire queste funzioni inline con la query o come parte del modello concettuale. Per ulteriori informazioni, vedere Funzioni definite dall'utente (Entity SQL).
L'esempio incluso in questo argomento è basato sul modello Sales di AdventureWorks. Per eseguire il codice incluso in questo argomento, è necessario avere già aggiunto il modello Sales di AdventureWorks al progetto e avere configurato il progetto per l'utilizzo di Entity Framework. Per ulteriori informazioni, vedere Procedura: utilizzare la Procedura guidata Entity Data Model (Entity Framework) o Procedura: configurare manualmente un progetto di Entity Framework e Procedura: definire manualmente un modello EDM (Entity Framework).
Esempio
Nell'esempio seguente viene definita una funzione denominata OrderTotal in una query Entity SQL. Questa funzione ottiene un oggetto SalesOrderHeader e ricalcola l'importo totale dovuto aggiungendo i valori delle proprietà SubTotal, TaxAmte Freight. Questa funzione viene quindi chiamata nella proiezione della query per restituire il valore TotalDue ricalcolato con il valore TotalDue restituito dall'origine dati. L'operatore USING è obbligatorio per la specifica dello spazio dei nomi dell'oggetto SalesOrderHeader passato alla funzione.
' 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]);
}
}
Vedere anche
Attività
Procedura: chiamare funzioni definite dal modello nelle query (LINQ to Entities)
Concetti
Funzioni definite dall'utente (Entity SQL)
Altre risorse
How to: Define Custom Functions in the Conceptual Model
How to: Define Custom Functions in the Conceptual Model