Partager via


Procédure : appeler une fonction définie par l'utilisateur (Entity Framework)

Entity SQL vous permet d'appeler des fonctions définies par l'utilisateur dans une requête. Vous pouvez inclure ces fonctions dans la requête ou comme faisant partie du modèle conceptuel. Pour plus d'informations, consultez Fonctions définies par l'utilisateur (Entity SQL).

L'exemple de cette rubrique est basé sur le modèle de vente Adventure Works Sales Model. Pour exécuter le code de cette rubrique, vous devez déjà avoir ajouté le modèle de vente AdventureWorks à votre projet et configuré ce dernier pour qu'il utilise Entity Framework. Pour plus d'informations, consultez Procédure : utiliser l'Assistant EDM (Entity Framework) ou Procédure : configurer manuellement un projet Entity Framework et Procédure : définir manuellement un modèle EDM (Entity Data Model) (Entity Framework).

Exemple

L'exemple suivant définit une fonction nommée OrderTotal dans une requête Entity SQL. Cette fonction prend un objet SalesOrderHeader et recalcule le montant total dû en ajoutant les valeurs des propriétés SubTotal, TaxAmt et Freight. Puis, cette fonction est appelée dans la projection de la requête pour retourner le TotalDue recalculé avec la valeur TotalDue retournée à partir de la source de données. L'opérateur USING est requis pour la spécification de l'espace de noms de l'objet SalesOrderHeader passé à la fonction.

' 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]);
    }
}

Voir aussi

Tâches

Procédure : appeler des fonctions définies par modèle dans des requêtes (LINQ to Entities)

Concepts

Fonctions définies par l'utilisateur (Entity SQL)

Autres ressources

How to: Define Custom Functions in the Conceptual Model
How to: Define Custom Functions in the Conceptual Model