Share via


Procédure : définir un modèle avec 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. L'exemple de cette rubrique fournit 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). La procédure stockée peut ensuite être appelée par son code dans une application qui utilise le modèle de données.

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 Adventure Works 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).

Le modèle de vente AdventureWorks Sales Model définit cinq entités :

  • Address

  • Contact

  • Product

  • SalesOrderDetail

  • SalesOrderHeader

Les extraits de schémas et de scripts de base de données suivants permettent d'implémenter une procédure stockée qui retourne les données contenue dans les tables SalesOrderDetail associées à un même SalesOrderHeader. (L'association FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID du modèle de vente Sales Model peut faire la même chose que cet exemple.)

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

  • Utilisez SQL Server Management Studio ou une syntaxe de commande de requête pour exécuter la commande de requête suivante, qui implémente la procédure stockée dans la base de données AdventureWorks.

    USE [AdventureWorks]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF OBJECT_ID ( 'dbo.GetOrderDetails', 'P' ) IS NOT NULL 
        DROP PROCEDURE dbo.GetOrderDetails;
    GO
    
    CREATE PROCEDURE [dbo].[GetOrderDetails] 
       @SalesOrderHeaderId int 
    AS
        SELECT SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber,
         OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount,
         rowguid, ModifiedDate, LineTotal
       FROM Sales.SalesOrderDetail
    WHERE SalesOrderID = @SalesOrderHeaderId;
    

Pour implémenter les spécifications SSDL (Store Schema Definition Language)

  1. Ouvrez le fichier SSDL.

  2. Ajoutez la syntaxe de fonction suivante à l'intérieur des balises du schéma, mais pas à l'intérieur des balises EntityContainer.

<Function Name="GetOrderDetails" Aggregate="false" 
    BuiltIn="false" NiladicFunction="false" 
    IsComposable="false" 
    ParameterTypeSemantics="AllowImplicitConversion" 
    Schema="dbo">
        <Parameter Name="SalesOrderHeaderId" Type="int" Mode="In" />
</Function>

Pour implémenter les spécifications CSDL (Conceptual Schema Definition Language)

  1. Ouvrez le fichier CSDL.

  2. Ajoutez le FunctionImport suivant à l'EntityContainer du segment de CSDL.

    <FunctionImport Name="GetOrderDetails"
        EntitySet="SalesOrderDetail"
        ReturnType="Collection(AdventureWorksModel.SalesOrderDetail)">
      <Parameter Name="SalesOrderHeaderId" Type="Int32" Mode="In">
      </Parameter>
    </FunctionImport>
    

Implémentez les spécifications MSL (Mapping Specification Language)

  1. Ouvrez le fichier.

  2. Ajoutez la syntaxe EntityContainerMapping suivante.

    <FunctionImportMapping FunctionImportName="GetOrderDetails"
      FunctionName="AdventureWorksModel.Store.GetOrderDetails"/>
    
  3. Régénérez le modèle.

Voir aussi

Tâches

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

Concepts

Prise en charge des procédures stockées (Entity Framework)
ModificationFunctionMapping (EntityTypeMapping)
ModificationFunctionMapping (AssociationSetMapping)