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

Une procédure stockée définie dans une base de données peut être exposée dans un modèle conceptuel de deux manières :

  • Vous pouvez créer une importation de fonction dans le modèle conceptuel qui mappe à une procédure stockée. Cela vous permet de définir une méthode sur votre ObjectContext qui exécute la procédure stockée dans la base de données. Selon la façon dont la procédure stockée est définie, l'importation de fonction correspondante peut retourner des types d'entité ou des types complexes.

  • Vous pouvez mapper les opérations d'insertion, de mise à jour et de suppression d'un type d'entité à des procédures stockées. Cela vous permet de définir des comportements personnalisés d'insertion, de mise à jour et de suppression pour les types d'entité.

    Bb896279.note(fr-fr,VS.100).gifRemarque :
    Si vous ne mappez pas les trois opérations d'insertion, de mise à jour et de suppression d'un type d'entité aux procédures stockées, les opérations non mappées échouent au moment de l'exécution et une UpdateException est levée.

Cette rubrique décrit comment créer une importation de fonction dans un modèle conceptuel qui mappe à une procédure stockée dans la base de données. Pour plus d'informations sur le mappage des opérations d'insertion, de mise à jour et de suppression pour les types d'entité aux procédures stockées, consultez Procédure : définir un modèle avec des procédures stockées de modification (Entity Framework).

La méthode recommandée pour créer une importation de fonction qui mappe à une procédure stockée est d'utiliser ADO.NET Entity Data Model Tools. Pour plus d'informations sur l'utilisation d'Entity Data Model Tools, consultez les rubriques suivantes :

Vous pouvez également modifier manuellement les fichiers de mappage et modèle pour créer une importation de fonction qui mappe à une procédure stockée. L'exemple de cette rubrique indique comment procéder et s'appuie sur l'exemple de base de données School et le modèle School. Pour plus d'informations sur la génération du modèle School à partir de la base de données School, consultez EDM Generator (EdmGen.exe). Une fois une procédure stockée définie dans la base de données, les principales étapes pour créer une importation de fonction qui mappe à la procédure stockée sont les suivantes :

  1. Ajoutez un élément Function au modèle de stockage qui spécifie la procédure stockée dans la base de données.

  2. Ajoutez un élément FunctionImport au modèle conceptuel qui spécifie l'importation de fonction dans le modèle conceptuel.

  3. Ajoutez un élément FunctionImportMapping au fichier de mappage qui mappe l'importation de fonction dans le modèle conceptuel à la fonction dans le modèle de stockage.

Les procédures dans cette rubrique décrivent comment créer les éléments Function, FunctionImport et FunctionImportMapping pour importer la procédure stockée suivante dans le modèle conceptuel :

IF NOT EXISTS (SELECT * FROM sys.objects 
            WHERE object_id = OBJECT_ID(N'[dbo].[GetStudentGrades]') 
            AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[GetStudentGrades]
            @StudentID int
            AS
            SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade
            WHERE StudentID = @StudentID
' 
END
GO

Pour ajouter un élément Function au modèle de stockage

  1. Ouvrez le modèle de stockage (fichier .ssdl).

  2. Ajoutez l'élément Function suivant en tant qu'enfant de l'élément Schema :

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

Pour ajouter un élément FunctionImport au modèle conceptuel.

  1. Ouvrez le modèle conceptuel (fichier .csdl).

  2. Ajoutez l'élément FunctionImport suivant en tant qu'enfant de l'élément EntityContainer :

    <FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades" 
                    ReturnType="Collection(SchoolModel.StudentGrade)">
      <Parameter Name="StudentID" Mode="In" Type="Int32" />
    </FunctionImport>
    

Pour ajouter un élément FunctionImportMapping au fichier de mappage

  1. Ouvrez le fichier de mappage (fichier.msl).

  2. Ajoutez l'élément FunctionImportMapping suivant en tant qu'enfant de l'élément EntityContainerMapping :

    <FunctionImportMapping FunctionImportName="GetStudentGrades" 
                           FunctionName="SchoolModel.Store.GetStudentGrades" />
    

Voir aussi

Autres ressources

Définition de modèles de données avancés (Tâches Entity Framework)
How to: Define Custom Functions in the Storage Model
Spécifications CSDL, SSDL et MSL