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
Wymagania wstępne
Aby ukończyć ten przewodnik, należy wykonać następujące czynności:
Zainstaluj bazę danych szkoły.
Najnowsza wersja programu Visual Studio
Konfigurowanie projektu
- Otwórz program Visual Studio.
- W menu Plik wskaż polecenie Nowy, a następnie kliknij pozycję Projekt
- W okienku po lewej stronie kliknij pozycję Visual C#, a następnie wybierz szablon Konsola
- 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
- Kliknij prawym przyciskiem myszy nazwę projektu w Eksplorator rozwiązań, wskaż polecenie Dodaj, a następnie kliknij polecenie Nowy element
- Wybierz pozycję Dane z menu po lewej stronie, a następnie wybierz pozycję ADO.NET Model danych jednostki w okienku Szablony
- Wprowadź ciąg TVFModel.edmx jako nazwę pliku, a następnie kliknij przycisk Dodaj
- W oknie dialogowym Wybieranie zawartości modelu wybierz pozycję Generuj z bazy danych, a następnie kliknij przycisk Dalej
- Kliknij pozycję New Połączenie ion Enter (localdb)\mssqllocaldb w polu tekstowym Nazwa serwera Wprowadź nazwę bazy danych, kliknij przycisk OK.
- W oknie dialogowym Wybieranie obiektów bazy danych w węźle Tabele wybierz tabele Person, StudentGrade i Course
- 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
- Kliknij przycisk Zakończ
- 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.
- 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.