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)
Ouvrez le fichier SSDL.
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)
Ouvrez le fichier CSDL.
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)
Ouvrez le fichier.
Ajoutez la syntaxe EntityContainerMapping suivante.
<FunctionImportMapping FunctionImportName="GetOrderDetails" FunctionName="AdventureWorksModel.Store.GetOrderDetails"/>
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)