Entity Framework - procedury składowane
Entity Framework umożliwia używanie procedur składowanych w Entity Data Model zamiast lub w połączeniu z jego automatycznym generowaniem poleceń.
- Za pomocą procedur składowanych można wykonywać wstępnie zdefiniowaną logikę w tabelach bazy danych, a wiele organizacji ma zasady, które wymagają użycia tych procedur składowanych. 
- Może również określić, że EF powinien używać procedur składowanych do wstawiania, aktualizowania lub usuwania jednostek. 
- Chociaż dynamicznie budowane polecenia są bezpieczne, wydajne i generalnie równie dobre lub lepsze od tych, które można napisać samodzielnie, istnieje wiele przypadków, w których procedury składowane już istnieją, a praktyki firmy mogą ograniczać bezpośrednie korzystanie z tabel. 
- Alternatywnie możesz po prostu chcieć mieć jawną kontrolę nad tym, co jest wykonywane w sklepie i wolisz tworzyć procedury składowane. 
Poniższy przykład tworzy nowy projekt z Plik → Nowy → Projekt.
 
                Step 1 - Wybierz aplikację konsoli ze środkowego panelu i wprowadź StoredProceduresDemo w polu nazwy.
Step 2 - W eksploratorze serwerów kliknij prawym przyciskiem myszy bazę danych.
Step 3 - Wybierz Nowe zapytanie i wprowadź następujący kod w edytorze T-SQL, aby dodać nową tabelę do bazy danych.
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
GOStep 4 - Kliknij prawym przyciskiem myszy edytor i wybierz opcję Wykonaj.
 
                Step 5- Kliknij prawym przyciskiem myszy swoją bazę danych i kliknij Odśwież. Zobaczysz nowo dodaną tabelę w swojej bazie danych.
Step 6 - W eksploratorze serwerów kliknij ponownie prawym przyciskiem myszy bazę danych.
 
                Step 7 - Wybierz Nowe zapytanie i wprowadź następujący kod w edytorze T-SQL, aby dodać procedurę składowaną do bazy danych, która zwróci oceny ucznia.
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
GOStep 8 - Kliknij prawym przyciskiem myszy edytor i wybierz opcję Wykonaj.
 
                Step 9- Kliknij prawym przyciskiem myszy swoją bazę danych i kliknij Odśwież. Zobaczysz, że w bazie danych została utworzona procedura składowana.
 
                Step 10 - Kliknij prawym przyciskiem myszy nazwę projektu w Eksploratorze rozwiązań i wybierz Dodaj → Nowy element.
Step 11 - Następnie wybierz ADO.NET Entity Data Model w okienku Szablony.
 
                Step 12 - Wpisz SPModel jako nazwę, a następnie kliknij przycisk Dodaj.
Step 13 - W oknie dialogowym Wybierz zawartość modelu wybierz projektanta EF z bazy danych, a następnie kliknij przycisk Dalej.
 
                Step 14 - Wybierz bazę danych i kliknij Dalej.
 
                Step 15 - W oknie dialogowym Wybierz obiekty bazy danych kliknij tabele, widoki.
 
                Step 16 - Wybierz funkcję GetStudentGradesForCourse znajdującą się w węźle Stored Procedures and Functions i kliknij Finish.
Step 17 - Wybierz View → Other Windows → Entity Data Model Browser i kliknij prawym przyciskiem myszy GetStudentGrades w sekcji Import funkcji i wybierz Edytuj.
 
                Spowoduje to wyświetlenie następującego okna dialogowego.
 
                Step 18 - Kliknij przycisk radiowy Encje i wybierz StudentGrade z pola wyboru jako typ zwrotu tej procedury składowanej i kliknij OK.
Przyjrzyjmy się poniższemu kodowi C #, w którym wszystkie oceny zostaną pobrane przez przekazanie identyfikatora ucznia jako parametru w procedurze składowanej 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();
      }
   }
}Kiedy powyższy kod zostanie skompilowany i wykonany, otrzymasz następujący wynik -
Course ID: 4022, Title: Microeconomics, Grade: 3.00
Course ID: 4041, Title: Macroeconomics, Grade: 3.50Zalecamy wykonanie powyższego przykładu krok po kroku w celu lepszego zrozumienia.