Entity Framework - funkcja wyceniana w tabeli
W tym rozdziale nauczmy się, jak mapować funkcje o wartościach tabelarycznych (TVF) przy użyciu Entity Framework Designer i jak wywołać TVF z zapytania LINQ.
- TVF są obecnie obsługiwane tylko w przepływie pracy Database First. 
- Został po raz pierwszy wprowadzony w Entity Framework w wersji 5. 
- Aby korzystać z TVF, musisz kierować na .NET Framework 4.5 lub nowszy. 
- Jest bardzo podobny do procedur składowanych, ale ma jedną kluczową różnicę, tj. Wynik TVF można komponować. Oznacza to, że wyniki z TVF mogą być używane w zapytaniu LINQ, podczas gdy wyniki procedury składowanej nie mogą. 
Spójrzmy na poniższy przykład tworzenia nowego projektu z Plik → Nowy → Projekt.
 
                Step 1 - Wybierz aplikację konsoli ze środkowego panelu i wprowadź TableValuedFunctionDemo 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- Teraz utwórz funkcję, która będzie zwracać oceny uczniów z kursu. Wprowadź następujący kod w edytorze T-SQL.
CREATE FUNCTION [dbo].[GetStudentGradesForCourse]
(@CourseID INT)
RETURNS TABLE
RETURN
   SELECT [EnrollmentID],
      [CourseID],
      [StudentID],
      [Grade]
   FROM   [dbo].[StudentGrade]
   WHERE  CourseID = @CourseIDStep 7 - Kliknij prawym przyciskiem myszy edytor i wybierz opcję Wykonaj.
 
                Teraz możesz zobaczyć, że funkcja została utworzona.
 
                Step 8 - Kliknij prawym przyciskiem myszy nazwę projektu w Eksploratorze rozwiązań i wybierz Dodaj → Nowy element.
Step 9 - Następnie wybierz ADO.NET Entity Data Model w okienku Szablony.
 
                Step 10 - Wpisz TVFModel jako nazwę, a następnie kliknij przycisk Dodaj.
Step 11 - W oknie dialogowym Wybierz zawartość modelu wybierz projektanta EF z bazy danych, a następnie kliknij przycisk Dalej.
 
                Step 12 - Wybierz bazę danych i kliknij Dalej.
 
                Step 13 - W oknie dialogowym Wybierz obiekty bazy danych wybierz tabele, widoki.
 
                Step 14 - Wybierz funkcję GetStudentGradesForCourse znajdującą się w węźle Stored Procedures and Functions i kliknij Finish.
Step 15 - Wybierz View → Other Windows → Entity Data Model Browser i kliknij prawym przyciskiem myszy GetStudentGradesForCourse w sekcji Import funkcji i wybierz Edytuj.
 
                Zobaczysz następujące okno dialogowe.
 
                Step 16 - Kliknij przycisk radiowy Entities i wybierz Enrollment z pola combo jako typ zwrotu tej funkcji i kliknij OK.
Przyjrzyjmy się poniższemu kodowi C #, w którym zostaną pobrane oceny wszystkich uczniów, którzy są zapisani na identyfikator kursu = 4022 w bazie danych.
class Program {
   static void Main(string[] args) {
      using (var context = new UniContextEntities()) {
         var CourseID = 4022;
         // Return all the best students in the Microeconomics class.
         var students = context.GetStudentGradesForCourse(CourseID);
         foreach (var result in students) {
            Console.WriteLine("Student ID:  {0}, Grade: {1}",
               result.StudentID, result.Grade);
         }
         Console.ReadKey();
      }
   }
}Kiedy powyższy kod zostanie skompilowany i wykonany, otrzymasz następujący wynik -
Student ID: 1, Grade: 2
Student ID: 4, Grade: 4
Student ID: 9, Grade: 3.5Zalecamy wykonanie powyższego przykładu krok po kroku w celu lepszego zrozumienia.