Procédures stockées des requêtes designer

Cette procédure pas à pas montre comment utiliser Entity Framework Designer (EF Designer) pour importer des procédures stockées dans un modèle, puis appeler les procédures stockées importées pour récupérer les résultats.

Notez que Code First ne prend pas en charge le mappage aux procédures stockées ou aux fonctions. Toutefois, vous pouvez appeler des procédures stockées ou des fonctions à l’aide de la méthode System.Data.Entity.DbSet.SqlQuery. Par exemple :

var query = context.Products.SqlQuery("EXECUTE [dbo].[GetAllProducts]")`;

Prérequis

Pour exécuter ce processus pas à pas, vous devez :

Configurer le projet

  • Ouvrez Visual Studio 2012.
  • Sélectionnez Fichier>, Nouveau, puis >Projet
  • Dans le volet gauche, cliquez sur Visual C#, puis sélectionnez le modèle Console.
  • Entrez EFwithSProcsSample comme nom.
  • Sélectionnez OK.

Créer un modèle

  • Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis sélectionnez Ajouter >> Nouvel élément.

  • Sélectionnez Données dans le menu de gauche, puis sélectionnez ADO.NET Entity Data Model dans le menu des Modèles.

  • Entrez EFwithSProcsModel.edmx comme nom de fichier, puis cliquez sur Ajouter.

  • Dans la boîte de dialogue Choisir le contenu du Model, sélectionnez Générer à partir de la base de données, puis cliquez sur Suivant.

  • Cliquer sur Nouvelle connexion.
    Dans la boîte de dialogue Propriétés de connexion, entrez le nom du serveur (par exemple, (localdb)\mssqllocaldb), sélectionnez la méthode d'authentification, tapez School comme nom de base de données, puis cliquez sur OK.
    La boîte de dialogue Choisir votre connexion de données est mise à jour avec vos paramètres de connexion de base de données.

  • Dans la boîte de dialogue Choisir vos objets de base de données, cochez la case des tableaux pour sélectionnez toutes les Tables.
    Sélectionnez également les procédures stockées suivantes sous le nœud Procédures stockées et Fonctions : GetStudentGrades, GetDepartmentName.

    Import Stored Procedures

    À compter de Visual Studio 2012, EF Designer prend en charge l’importation en bloc de procédures stockées. L’option Importer des procédures et fonctions stockées sélectionnées dans le modèle de l’entité est activé par défaut.

  • Cliquez sur Terminer.

Par défaut, la forme de résultat de chaque procédure stockée ou fonction importée qui retourne plusieurs colonnes devient automatiquement un nouveau type complexe. Dans cet exemple, nous voulons mapper les résultats de la fonction GetStudentGrades à l’entité StudentGrade et les résultats du GetDepartmentName à aucun (aucun est la valeur par défaut).

Pour qu'une importation de fonction retourne un type d’entité, les colonnes retournées par la procédure stockée correspondante doivent correspondre exactement aux propriétés scalaires du type d’entité retourné. Une importation de fonction peut également retourner des collections de types simples, de types complexes, ou aucune valeur.

  • Cliquez avec le bouton droit sur l’aire de conception et sélectionnez le navigateur de modèle.
  • Dans explorateur de modèles, sélectionnez Function Imports, puis double-cliquez sur la fonction GetStudentGrades .
  • Dans la boîte de dialogue Modifier l’importation de fonction, sélectionnez Entités et choisissez StudentGrade.
    La case à cocher Function Import est composée en haut de la boîte de dialogue Function Imports vous permet de mapper aux fonctions composables. Si vous cochez cette case, seules les fonctions composables (Fonctions table) apparaissent dans la liste déroulante Procédure stockée /Nom de la fonction. Si vous ne cochez pas cette case, seules les fonctions non composables sont affichées dans la liste.

Utiliser le Modèle

Ouvrez le fichier Program.cs où la méthode Main est définie. Ajoutez le code suivant dans la fonction Main.

Le code appelle deux procédures stockées : GetStudentGrades (retourne StudentGrades pour le StudentId) spécifié et GetDepartmentName (retourne le nom du service dans le paramètre de sortie).  

    using (SchoolEntities context = new SchoolEntities())
    {
        // Specify the Student ID.
        int studentId = 2;

        // Call GetStudentGrades and iterate through the returned collection.
        foreach (StudentGrade grade in context.GetStudentGrades(studentId))
        {
            Console.WriteLine("StudentID: {0}\tSubject={1}", studentId, grade.Subject);
            Console.WriteLine("Student grade: " + grade.Grade);
        }

        // Call GetDepartmentName.
        // Declare the name variable that will contain the value returned by the output parameter.
        ObjectParameter name = new ObjectParameter("Name", typeof(String));
        context.GetDepartmentName(1, name);
        Console.WriteLine("The department name is {0}", name.Value);

    }

Compilez et exécutez l'application. Le programme génère la sortie suivante :

StudentID: 2
Student grade: 4.00
StudentID: 2
Student grade: 3.50
The department name is Engineering

Paramètres de sortie

Si des paramètres de sortie sont utilisés, leurs valeurs ne seront disponibles qu'après la lecture complète des résultats. Cela est dû au comportement sous-jacent de DbDataReader, consultez Récupération de données à l’aide d’un DataReader pour plus d’informations.