Partager via


Procédure : exécuter une requête à l'aide d'une procédure stockée (Entity Framework)

De nombreux développeurs d'applications et administrateurs de bases de données utilisent des procédures stockées pour appliquer la sécurité, assurer la prévisibilité et encapsuler la logique sur des données au sein de la base de données. Le code d'application qui récupère des données mappées à une procédure stockée utilise une fonction identifiée par l'élément FunctionImport. Les éléments de base de la syntaxe de schéma requise pour mapper une procédure stockée à une implémentation EDM (Entity Data Model) sont décrits dans Procédure : définir un modèle avec une procédure stockée (Entity Framework).

Le modèle EDM prend en charge deux types de mappages de procédures stockées. Pour plus d'informations sur le mappage de procédures stockées qui mettent à jour des données, voir Prise en charge des procédures stockées (Entity Framework).

Les exemples de cette rubrique sont basés sur le modèle de vente Adventure Works Sales Model. Pour exécuter le code de cet exemple, vous devez déjà avoir ajouté le modèle de vente AdventureWorks Sales Model à votre projet et configuré ce dernier pour qu'il utilise Entity Framework. Pour cela, exécutez les procédures décrites dans Procédure : configurer manuellement un projet Entity Framework et Procédure : définir manuellement un modèle EDM (Entity Data Model) (Entity Framework).

Cinq entités sont définies dans le schéma :

  • Address

  • Contact

  • Product

  • SalesOrderDetail

  • SalesOrderHeader

Les étapes suivantes implémentent une application cliente et du code qui exécute une procédure stockée mappée au GetOrderDetailsFunctionImport dans le schéma conceptuel du modèle de données. La fonction récupère des entités SalesOrderDetail liées à un SalesOrderHeader donné. (L'association FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID de ce modèle peut faire la même chose que cet exemple.)

Pour créer la procédure stockée dans la base de données

  1. Créez une application console.

  2. Ajoutez une référence à la DLL implémentée dans la rubrique Procédure : définir un modèle avec une procédure stockée (Entity Framework).

  3. Ajoutez des références à System.Data.Entity et à System.Runtime.Serialization.

  4. Ajoutez la directive de préprocesseur du AdventureWorksModel implémenté dans Procédure : définir un modèle avec une procédure stockée (Entity Framework).

Exemple

La procédure stockée est utilisée avec le paramètre requis pour un SalesOrderHeaderId. La syntaxe est disponible dans l'Explorateur d'objets en tant que méthode sur l'espace de noms AdventureWorksEntities : GetOrderDetails(int). Le code suivant exécute la procédure stockée pour retourner des résultats qui sont ensuite énumérés dans une boucle foreach.

Option Explicit On
Option Strict On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports AdvWrksSalesModel

Module Module1
    Sub Main()
        Try
            Using db As AdvWksSalesEntities = New AdvWksSalesEntities()
                Dim soHeaderNumber As Integer = 43659
                For Each order As SalesOrderDetail _
                            In db.GetOrderDetails(soHeaderNumber)
                    Console.WriteLine("Header#: {0} " & _
                        "Order#: {1} ProductID: {2} Quantity: {3} Price: {4}", _
                        soHeaderNumber, order.SalesOrderDetailID, order.ProductID, _
                        order.OrderQty, order.UnitPrice)
                Next

            End Using

        Catch ex As System.Data.MappingException
            Console.WriteLine(ex.ToString())
        Catch ex As System.Data.CommandExecutionException
            Console.WriteLine(ex.ToString())
        End Try
    End Sub
End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdvWrksSalesModel;

namespace AdvWksSalesSProcs
{
    class Program
    {
        static void Main(string[] args)
        {
            using (AdvWksSalesEntities objCtx = 
                                new AdvWksSalesEntities())
            {
                try
                {
                    int soHeaderNumber = 43659;
                    foreach (SalesOrderDetail order in
                              objCtx.GetOrderDetails(soHeaderNumber))
                        Console.WriteLine("Header#: {0} " +
                        "Order#: {1} ProductID: {2} Quantity: {3} Price: {4}",
                        soHeaderNumber, order.SalesOrderDetailID,
                        order.ProductID,
                        order.OrderQty, order.UnitPrice);

                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }

            }
        }
    }
}

La sortie se présente comme suit :

Header#: 43659 Order#: 1 ProductID: 776 Quantity: 1 Price: 2024.9940
Header#: 43659 Order#: 2 ProductID: 777 Quantity: 3 Price: 2024.9940
Header#: 43659 Order#: 3 ProductID: 778 Quantity: 1 Price: 2024.9940
Header#: 43659 Order#: 4 ProductID: 771 Quantity: 1 Price: 2039.9940
Header#: 43659 Order#: 5 ProductID: 772 Quantity: 1 Price: 2039.9940
Header#: 43659 Order#: 6 ProductID: 773 Quantity: 2 Price: 2039.9940
Header#: 43659 Order#: 7 ProductID: 774 Quantity: 1 Price: 2039.9940
Header#: 43659 Order#: 8 ProductID: 714 Quantity: 3 Price: 28.8404
Header#: 43659 Order#: 9 ProductID: 716 Quantity: 1 Price: 28.8404
Header#: 43659 Order#: 10 ProductID: 709 Quantity: 6 Price: 5.7000
Header#: 43659 Order#: 11 ProductID: 712 Quantity: 2 Price: 5.1865
Header#: 43659 Order#: 12 ProductID: 711 Quantity: 4 Price: 20.1865

Voir aussi

Tâches

Procédure : définir un modèle avec une procédure stockée (Entity Framework)

Concepts

Modèle de vente AdventureWorks Sales Model (EDM)
Prise en charge des procédures stockées (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)