Funkcje wartości tabeli (TVFs)

Uwaga

Tylko platforma EF5 — funkcje, interfejsy API itp. omówione na tej stronie zostały wprowadzone w programie Entity Framework 5. Jeśli korzystasz ze starszej wersji, niektóre lub wszystkie podane informacje nie mają zastosowania.

W filmie wideo i przewodniku krok po kroku pokazano, jak mapować funkcje wartości tabeli (TVFs) przy użyciu Projektant Entity Framework. Demonstruje również sposób wywoływania programu TVF z zapytania LINQ.

Pliki TVFs są obecnie obsługiwane tylko w przepływie pracy Database First.

Obsługa platformy TVF została wprowadzona w programie Entity Framework w wersji 5. Należy pamiętać, że aby używać nowych funkcji, takich jak funkcje z wartościami tabel, wyliczenia i typy przestrzenne, należy wybrać program .NET Framework 4.5. Program Visual Studio 2012 domyślnie jest przeznaczony dla platformy .NET 4.5.

Pliki TVF są bardzo podobne do procedur składowanych z jedną kluczową różnicą: wynik TVF jest komponowalny. Oznacza to, że wyniki z tvf mogą być używane w zapytaniu LINQ, podczas gdy wyniki procedury składowanej nie mogą.

Obejrzyj film

Prezentowane przez: Julia Kornich

ZIP | MP4 | ZIP

Wymagania wstępne

Aby ukończyć ten przewodnik, należy wykonać następujące czynności:

Konfigurowanie projektu

  1. Otwórz program Visual Studio.
  2. W menu Plik wskaż polecenie Nowy, a następnie kliknij pozycję Projekt
  3. W okienku po lewej stronie kliknij pozycję Visual C#, a następnie wybierz szablon Konsola
  4. Wprowadź ciąg TVF jako nazwę projektu, a następnie kliknij przycisk OK

Dodawanie programu TVF do bazy danych

  • Wybieranie pozycji Widok —> Eksplorator obiektów programu SQL Server
  • Jeśli baza danych LocalDB nie znajduje się na liście serwerów: kliknij prawym przyciskiem myszy program SQL Server i wybierz polecenie Dodaj program SQL Server Użyj domyślnego uwierzytelniania systemu Windows, aby nawiązać połączenie z serwerem LocalDB
  • Rozwiń węzeł LocalDB
  • W węźle Bazy danych kliknij prawym przyciskiem myszy węzeł Bazy danych Szkoły i wybierz pozycję Nowe zapytanie...
  • W edytorze T-SQL wklej następującą definicję narzędzia TVF
CREATE FUNCTION [dbo].[GetStudentGradesForCourse]

(@CourseID INT)

RETURNS TABLE

RETURN
    SELECT [EnrollmentID],
           [CourseID],
           [StudentID],
           [Grade]
    FROM   [dbo].[StudentGrade]
    WHERE  CourseID = @CourseID
  • Kliknij prawym przyciskiem myszy w edytorze języka T-SQL i wybierz polecenie Wykonaj
  • Funkcja GetStudentGradesForCourse jest dodawana do bazy danych School

 

Tworzenie modelu

  1. Kliknij prawym przyciskiem myszy nazwę projektu w Eksplorator rozwiązań, wskaż polecenie Dodaj, a następnie kliknij polecenie Nowy element
  2. Wybierz pozycję Dane z menu po lewej stronie, a następnie wybierz pozycję ADO.NET Model danych jednostki w okienku Szablony
  3. Wprowadź ciąg TVFModel.edmx jako nazwę pliku, a następnie kliknij przycisk Dodaj
  4. W oknie dialogowym Wybieranie zawartości modelu wybierz pozycję Generuj z bazy danych, a następnie kliknij przycisk Dalej
  5. Kliknij pozycję New Połączenie ion Enter (localdb)\mssqllocaldb w polu tekstowym Nazwa serwera Wprowadź nazwę bazy danych, kliknij przycisk OK.
  6. W oknie dialogowym Wybieranie obiektów bazy danych w węźle Tabele wybierz tabele Person, StudentGrade i Course
  7. Wybierz funkcję GetStudentGradesForCourse znajdującą się w węźle Procedury składowane i funkcje Uwaga, że począwszy od programu Visual Studio 2012, jednostka Projektant umożliwia wsadowe importowanie procedur składowanych i funkcji
  8. Kliknij przycisk Zakończ
  9. Zostanie wyświetlona Projektant Jednostka, która udostępnia powierzchnię projektową do edycji modelu. Wszystkie obiekty wybrane w oknie dialogowym Wybieranie obiektów bazy danych są dodawane do modelu.
  10. Domyślnie kształt wyniku każdej zaimportowanej procedury składowanej lub funkcji automatycznie stanie się nowym typem złożonym w modelu jednostki. Chcemy jednak zamapować wyniki funkcji GetStudentGradesForCourse na jednostkę StudentGrade: kliknij prawym przyciskiem myszy powierzchnię projektową i wybierz pozycję Przeglądarka modelu w przeglądarce modelu, wybierz pozycję Importy funkcji, a następnie kliknij dwukrotnie funkcję GetStudentGradesForCourse w oknie dialogowym Edytowanie importu funkcji, wybierz pozycję Jednostki i wybierz pozycję StudentGrade

Utrwalanie i pobieranie danych

Otwórz plik, w którym zdefiniowano metodę Main. Dodaj następujący kod do funkcji Main.

Poniższy kod pokazuje, jak utworzyć zapytanie korzystające z funkcji o wartości tabeli. Zapytanie projektuje wyniki w anonimowy typ zawierający powiązany tytuł kursu i powiązanych uczniów z klasą większą lub równą 3,5.

using (var context = new SchoolEntities())
{
    var CourseID = 4022;
    var Grade = 3.5M;

    // Return all the best students in the Microeconomics class.
    var students = from s in context.GetStudentGradesForCourse(CourseID)
                            where s.Grade >= Grade
                            select new
                            {
                                s.Person,
                                s.Course.Title
                            };

    foreach (var result in students)
    {
        Console.WriteLine(
            "Couse: {0}, Student: {1} {2}",
            result.Title,  
            result.Person.FirstName,  
            result.Person.LastName);
    }
}

Skompiluj i uruchom aplikację. Program generuje następujące dane wyjściowe:

Couse: Microeconomics, Student: Arturo Anand
Couse: Microeconomics, Student: Carson Bryant

Podsumowanie

W tym przewodniku przyjrzeliśmy się, jak mapować funkcje z wartościami tabel (TVFs) przy użyciu Projektant Entity Framework. Pokazano również, jak wywołać program TVF z zapytania LINQ.