В этой главе мы узнаем, как отображать табличные функции (TVF) с помощью Entity Framework Designer и как вызывать TVF из запроса LINQ.
-
TVF в настоящее время поддерживаются только в рабочем процессе Database First.
-
Впервые он был представлен в Entity Framework версии 5.
-
Чтобы использовать TVF, вы должны ориентироваться на .NET Framework 4.5 или выше.
-
Это очень похоже на хранимые процедуры, но с одним ключевым отличием, т. Е. Результат TVF является составным. Это означает, что результаты из TVF могут использоваться в запросе LINQ, а результаты хранимой процедуры — нет.
TVF в настоящее время поддерживаются только в рабочем процессе Database First.
Впервые он был представлен в Entity Framework версии 5.
Чтобы использовать TVF, вы должны ориентироваться на .NET Framework 4.5 или выше.
Это очень похоже на хранимые процедуры, но с одним ключевым отличием, т. Е. Результат TVF является составным. Это означает, что результаты из TVF могут использоваться в запросе LINQ, а результаты хранимой процедуры — нет.
Давайте рассмотрим следующий пример создания нового проекта из File → New → Project.
Шаг 1 — Выберите Консольное приложение из средней панели и введите TableValuedFunctionDemo в поле имени.
Шаг 2 — В обозревателе серверов щелкните правой кнопкой мыши свою базу данных.
Шаг 3 — Выберите New Query и введите следующий код в редакторе T-SQL, чтобы добавить новую таблицу в базу данных.
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
Шаг 4 — Щелкните правой кнопкой мыши на редакторе и выберите «Выполнить».
Шаг 5 — Щелкните правой кнопкой мыши по вашей базе данных и нажмите Обновить. Вы увидите новую добавленную таблицу в вашей базе данных.
Шаг 6 — Теперь создайте функцию, которая будет возвращать оценки студентов за курс. Введите следующий код в редакторе T-SQL.
CREATE FUNCTION [dbo].[GetStudentGradesForCourse] (@CourseID INT) RETURNS TABLE RETURN SELECT [EnrollmentID], [CourseID], [StudentID], [Grade] FROM [dbo].[StudentGrade] WHERE CourseID = @CourseID
Шаг 7 — Щелкните правой кнопкой мыши на редакторе и выберите «Выполнить».
Теперь вы можете видеть, что функция создана.
Шаг 8 — Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите Добавить → Новый элемент.
Шаг 9 — Затем выберите ADO.NET Entity Data Model на панели шаблонов.
Шаг 10 — введите TVFModel в качестве имени и нажмите кнопку «Добавить».
Шаг 11 — В диалоговом окне «Выбор содержимого модели» выберите EF designer из базы данных и нажмите «Далее».
Шаг 12 — Выберите вашу базу данных и нажмите Далее.
Шаг 13 — В диалоговом окне «Выбор объектов базы данных» выберите таблицы, представления.
Шаг 14 — Выберите функцию GetStudentGradesForCourse, расположенную в узле «Хранимые процедуры и функции», и нажмите «Готово».
Шаг 15 — Выберите «Вид» → «Другие окна» → «Браузер модели данных объектов» и щелкните правой кнопкой мыши GetStudentGradesForCourse в разделе «Импорт функций» и выберите «Редактировать».
Вы увидите следующий диалог.
Шаг 16. Нажмите переключатель «Сущности», выберите «Регистрация» в поле со списком в качестве типа возврата этой функции и нажмите «ОК».
Давайте посмотрим на следующий код C #, в котором будут получены оценки всех учащихся, которые зарегистрированы в базе данных с идентификатором курса = 4022.
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(); } } }
Когда приведенный выше код скомпилирован и выполнен, вы получите следующий вывод:
Student ID: 1, Grade: 2 Student ID: 4, Grade: 4 Student ID: 9, Grade: 3.5
Мы рекомендуем вам выполнить вышеприведенный пример пошагово для лучшего понимания.