Entity Framework - Gespeicherte Prozeduren

Mit dem Entity Framework können Sie gespeicherte Prozeduren im Entity Data Model anstelle oder in Kombination mit der automatischen Befehlsgenerierung verwenden.

  • Sie können gespeicherte Prozeduren verwenden, um vordefinierte Logik für Datenbanktabellen auszuführen, und viele Organisationen verfügen über Richtlinien, die die Verwendung dieser gespeicherten Prozeduren erfordern.

  • Es kann auch festgelegt werden, dass EF Ihre gespeicherten Prozeduren zum Einfügen, Aktualisieren oder Löschen von Entitäten verwenden soll.

  • Obwohl die dynamisch erstellten Befehle sicher, effizient und im Allgemeinen so gut oder besser sind als die, die Sie möglicherweise selbst schreiben, gibt es viele Fälle, in denen bereits gespeicherte Prozeduren vorhanden sind und Ihre Unternehmenspraktiken die direkte Verwendung der Tabellen einschränken können.

  • Alternativ möchten Sie möglicherweise nur die explizite Kontrolle darüber haben, was im Geschäft ausgeführt wird, und möchten lieber gespeicherte Prozeduren erstellen.

Im folgenden Beispiel wird ein neues Projekt über Datei → Neu → Projekt erstellt.

Step 1 - Wählen Sie im mittleren Bereich die Konsolenanwendung aus und geben Sie StoredProceduresDemo in das Namensfeld ein.

Step 2 - Klicken Sie im Server Explorer mit der rechten Maustaste auf Ihre Datenbank.

Step 3 - Wählen Sie Neue Abfrage und geben Sie den folgenden Code in den T-SQL-Editor ein, um eine neue Tabelle in Ihre Datenbank aufzunehmen.

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 - Klicken Sie mit der rechten Maustaste auf den Editor und wählen Sie Ausführen.

Step 5- Klicken Sie mit der rechten Maustaste auf Ihre Datenbank und klicken Sie auf Aktualisieren. Sie sehen die neu hinzugefügte Tabelle in Ihrer Datenbank.

Step 6 - Klicken Sie im Server-Explorer erneut mit der rechten Maustaste auf Ihre Datenbank.

Step 7 - Wählen Sie Neue Abfrage und geben Sie den folgenden Code in den T-SQL-Editor ein, um eine gespeicherte Prozedur in Ihrer Datenbank hinzuzufügen, die die Noten der Schüler zurückgibt.

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 - Klicken Sie mit der rechten Maustaste auf den Editor und wählen Sie Ausführen.

Step 9- Klicken Sie mit der rechten Maustaste auf Ihre Datenbank und klicken Sie auf Aktualisieren. Sie werden sehen, dass eine gespeicherte Prozedur in Ihrer Datenbank erstellt wird.

Step 10 - Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen und wählen Sie Hinzufügen → Neues Element.

Step 11 - Wählen Sie dann im Bereich Vorlagen die Option ADO.NET-Entitätsdatenmodell aus.

Step 12 - Geben Sie SPModel als Namen ein und klicken Sie dann auf Hinzufügen.

Step 13 - Wählen Sie im Dialogfeld Modellinhalt auswählen die Option EF-Designer aus der Datenbank aus und klicken Sie dann auf Weiter.

Step 14 - Wählen Sie Ihre Datenbank aus und klicken Sie auf Weiter.

Step 15 - Klicken Sie im Dialogfeld Datenbankobjekte auswählen auf Tabellen und Ansichten.

Step 16 - Wählen Sie die Funktion GetStudentGradesForCourse unter dem Knoten Gespeicherte Prozeduren und Funktionen aus und klicken Sie auf Fertig stellen.

Step 17 - Wählen Sie Ansicht → Andere Fenster → Browser für Entitätsdatenmodelle und klicken Sie mit der rechten Maustaste unter Funktionsimporte auf GetStudentGrades und wählen Sie Bearbeiten.

Es wird der folgende Dialog erzeugt.

Step 18 - Klicken Sie auf das Optionsfeld Entitäten, wählen Sie StudentGrade aus der Combobox als Rückgabetyp dieser gespeicherten Prozedur aus und klicken Sie auf OK.

Schauen wir uns den folgenden C # -Code an, in dem alle Noten abgerufen werden, indem die Schüler-ID als Parameter in der gespeicherten Prozedur GetStudentGrades übergeben wird.

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();

      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, erhalten Sie die folgende Ausgabe:

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

Wir empfehlen, dass Sie das obige Beispiel zum besseren Verständnis Schritt für Schritt ausführen.