Entity Framework - Stored procedure

Entity Framework consente di utilizzare stored procedure in Entity Data Model anziché o in combinazione con la generazione automatica dei comandi.

  • È possibile utilizzare le stored procedure per eseguire la logica predefinita sulle tabelle di database e molte organizzazioni dispongono di criteri che richiedono l'utilizzo di queste stored procedure.

  • Può anche specificare che EF deve utilizzare le stored procedure per inserire, aggiornare o eliminare entità.

  • Sebbene i comandi creati dinamicamente siano sicuri, efficienti e generalmente validi o migliori di quelli che potresti scrivere tu stesso, ci sono molti casi in cui esistono già stored procedure e le pratiche della tua azienda possono limitare l'uso diretto delle tabelle.

  • In alternativa, potresti semplicemente voler avere un controllo esplicito su ciò che viene eseguito nell'archivio e preferire creare stored procedure.

L'esempio seguente crea un nuovo progetto da File → Nuovo → Progetto.

Step 1 - Seleziona l'applicazione console dal riquadro centrale e inserisci StoredProceduresDemo nel campo del nome.

Step 2 - In Esplora server fare clic con il pulsante destro del mouse sul database.

Step 3 - Seleziona Nuova query e inserisci il seguente codice nell'editor T-SQL per aggiungere una nuova tabella nel tuo database.

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 - Fai clic con il pulsante destro del mouse sull'editor e seleziona Esegui.

Step 5- Fare clic con il pulsante destro del mouse sul database e fare clic su Aggiorna. Vedrai la tabella appena aggiunta nel tuo database.

Step 6 - In Esplora server, fai nuovamente clic con il pulsante destro del mouse sul database.

Step 7 - Seleziona Nuova query e inserisci il seguente codice nell'editor T-SQL per aggiungere una procedura memorizzata nel tuo database, che restituirà i voti dello studente.

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 - Fai clic con il pulsante destro del mouse sull'editor e seleziona Esegui.

Step 9- Fare clic con il pulsante destro del mouse sul database e fare clic su Aggiorna. Vedrai che una stored procedure viene creata nel tuo database.

Step 10 - Fare clic con il pulsante destro del mouse sul nome del progetto in Esplora soluzioni e selezionare Aggiungi → Nuovo elemento.

Step 11 - Quindi selezionare ADO.NET Entity Data Model nel riquadro Modelli.

Step 12 - Immettere SPModel come nome, quindi fare clic su Aggiungi.

Step 13 - Nella finestra di dialogo Scegli contenuto modello, seleziona Progettazione EF dal database, quindi fai clic su Avanti.

Step 14 - Seleziona il tuo database e fai clic su Avanti.

Step 15 - Nella finestra di dialogo Scegli gli oggetti del database, fare clic su tabelle, viste.

Step 16 - Selezionare la funzione GetStudentGradesForCourse situata nel nodo Stored procedure e funzioni e fare clic su Fine.

Step 17 - Selezionare Visualizza → Altre finestre → Browser modello dati entità e fare clic con il pulsante destro del mouse su GetStudentGrades in Importazioni di funzioni e selezionare Modifica.

Produrrà la seguente finestra di dialogo.

Step 18 - Fare clic sul pulsante di opzione Entità e selezionare StudentGrade dalla casella combinata come tipo di ritorno di questa procedura memorizzata e fare clic su OK.

Diamo un'occhiata al seguente codice C # in cui verranno recuperati tutti i voti passando l'ID studente come parametro nella stored procedure 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();

      }
   }
}

Quando il codice precedente viene compilato ed eseguito, riceverai il seguente output:

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

Si consiglia di eseguire l'esempio precedente in modo graduale per una migliore comprensione.