Entity Framework - Procédures stockées

Entity Framework vous permet d'utiliser des procédures stockées dans le modèle de données d'entité au lieu ou en combinaison avec sa génération de commande automatique.

  • Vous pouvez utiliser des procédures stockées pour exécuter une logique prédéfinie sur les tables de base de données, et de nombreuses organisations ont mis en place des stratégies qui nécessitent l'utilisation de ces procédures stockées.

  • Il peut également spécifier qu'EF doit utiliser vos procédures stockées pour insérer, mettre à jour ou supprimer des entités.

  • Bien que les commandes générées dynamiquement soient sécurisées, efficaces et généralement aussi bonnes ou meilleures que celles que vous pouvez écrire vous-même, il existe de nombreux cas où des procédures stockées existent déjà et les pratiques de votre entreprise peuvent restreindre l'utilisation directe des tables.

  • Vous pouvez également vouloir simplement avoir un contrôle explicite sur ce qui est exécuté sur le magasin et préférer créer des procédures stockées.

L'exemple suivant crée un nouveau projet à partir de Fichier → Nouveau → Projet.

Step 1 - Sélectionnez l'application console dans le volet central et saisissez StoredProceduresDemo dans le champ de nom.

Step 2 - Dans l'explorateur de serveur, faites un clic droit sur votre base de données.

Step 3 - Sélectionnez Nouvelle requête et entrez le code suivant dans l'éditeur T-SQL pour ajouter une nouvelle table dans votre base de données.

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = 
   OBJECT_ID(N'[dbo].[StudentGrade]') AND type in (N'U'))

BEGIN

   CREATE TABLE [dbo].[StudentGrade](

      [EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
      [CourseID] [int] NOT NULL,
      [StudentID] [int] NOT NULL,
      [Grade] [decimal](3, 2) NULL,

      CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED (
         [EnrollmentID] ASC
      )

      WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

   ) ON [PRIMARY]

END
GO

Step 4 - Cliquez avec le bouton droit sur l'éditeur et sélectionnez Exécuter.

Step 5- Faites un clic droit sur votre base de données et cliquez sur Actualiser. Vous verrez la table nouvellement ajoutée dans votre base de données.

Step 6 - Dans l'explorateur de serveur, cliquez à nouveau avec le bouton droit sur votre base de données.

Step 7 - Sélectionnez Nouvelle requête et entrez le code suivant dans l'éditeur T-SQL pour ajouter une procédure stockée dans votre base de données, qui renverra les notes des étudiants.

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

Step 8 - Cliquez avec le bouton droit sur l'éditeur et sélectionnez Exécuter.

Step 9- Faites un clic droit sur votre base de données et cliquez sur Actualiser. Vous verrez qu'une procédure stockée est créée dans votre base de données.

Step 10 - Cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de solutions et sélectionnez Ajouter → Nouvel élément.

Step 11 - Sélectionnez ensuite ADO.NET Entity Data Model dans le volet Modèles.

Step 12 - Entrez SPModel comme nom, puis cliquez sur Ajouter.

Step 13 - Dans la boîte de dialogue Choisir le contenu du modèle, sélectionnez Concepteur EF à partir de la base de données, puis cliquez sur Suivant.

Step 14 - Sélectionnez votre base de données et cliquez sur Suivant.

Step 15 - Dans la boîte de dialogue Choisissez vos objets de base de données, cliquez sur les tables, les vues.

Step 16 - Sélectionnez la fonction GetStudentGradesForCourse située sous le nœud Procédures et fonctions stockées et cliquez sur Terminer.

Step 17 - Sélectionnez Affichage → Autres fenêtres → Navigateur de modèles de données d'entité et cliquez avec le bouton droit sur GetStudentGrades sous Importations de fonctions et sélectionnez Modifier.

Il produira le dialogue suivant.

Step 18 - Cliquez sur le bouton radio Entités et sélectionnez StudentGrade dans la liste déroulante comme type de retour de cette procédure stockée et cliquez sur OK.

Jetons un coup d'œil au code C # suivant dans lequel toutes les notes seront récupérées en passant l'ID étudiant en tant que paramètre dans la procédure stockée GetStudentGrades.

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         int studentID = 22;
         var studentGrades = context.GetStudentGrades(studentID);

         foreach (var student in studentGrades) {
            Console.WriteLine("Course ID: {0}, Title: {1}, Grade: {2} ", 
               student.CourseID, student.Course.Title, student.Grade);
         }

         Console.ReadKey();

      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, vous recevrez la sortie suivante -

Course ID: 4022, Title: Microeconomics, Grade: 3.00
Course ID: 4041, Title: Macroeconomics, Grade: 3.50

Nous vous recommandons d'exécuter l'exemple ci-dessus étape par étape pour une meilleure compréhension.