Entity Framework позволяет использовать хранимые процедуры в модели данных Entity вместо или в сочетании с ее автоматической генерацией команд.
-
Вы можете использовать хранимые процедуры для выполнения предопределенной логики для таблиц базы данных, и во многих организациях существуют политики, которые требуют использования этих хранимых процедур.
-
Он также может указывать, что EF должен использовать ваши хранимые процедуры для вставки, обновления или удаления сущностей.
-
Хотя динамически создаваемые команды являются безопасными, эффективными и, как правило, лучше или лучше, чем те, которые вы можете написать самостоятельно, во многих случаях хранимые процедуры уже существуют, и практика вашей компании может ограничивать прямое использование таблиц.
-
В качестве альтернативы вы можете просто явно контролировать то, что выполняется в хранилище, и предпочитаете создавать хранимые процедуры.
Вы можете использовать хранимые процедуры для выполнения предопределенной логики для таблиц базы данных, и во многих организациях существуют политики, которые требуют использования этих хранимых процедур.
Он также может указывать, что EF должен использовать ваши хранимые процедуры для вставки, обновления или удаления сущностей.
Хотя динамически создаваемые команды являются безопасными, эффективными и, как правило, лучше или лучше, чем те, которые вы можете написать самостоятельно, во многих случаях хранимые процедуры уже существуют, и практика вашей компании может ограничивать прямое использование таблиц.
В качестве альтернативы вы можете просто явно контролировать то, что выполняется в хранилище, и предпочитаете создавать хранимые процедуры.
В следующем примере создается новый проект из File → New → Project.
Шаг 1 — Выберите Консольное приложение из средней панели и введите StoredProceduresDemo в поле имени.
Шаг 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 — В обозревателе серверов снова щелкните правой кнопкой мыши свою базу данных.
Шаг 7. Выберите New Query и введите следующий код в редакторе T-SQL, чтобы добавить хранимую процедуру в базу данных, которая будет возвращать оценки учеников.
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 GO
Шаг 8 — Щелкните правой кнопкой мыши на редакторе и выберите «Выполнить».
Шаг 9 — Щелкните правой кнопкой мыши по вашей базе данных и нажмите Обновить. Вы увидите, что в вашей базе данных создана хранимая процедура.
Шаг 10 — Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите Добавить → Новый элемент.
Шаг 11 — Затем выберите ADO.NET Entity Data Model на панели шаблонов.
Шаг 12 — введите SPModel в качестве имени и нажмите кнопку «Добавить».
Шаг 13 — В диалоговом окне «Выбор содержимого модели» выберите EF designer из базы данных и нажмите «Далее».
Шаг 14 — Выберите вашу базу данных и нажмите Далее.
Шаг 15 — В диалоговом окне «Выбор объектов базы данных» щелкните таблицы, просмотры.
Шаг 16. Выберите функцию GetStudentGradesForCourse, расположенную в узле «Хранимые процедуры и функции», и нажмите «Готово».
Шаг 17 — Выберите «Вид» → «Другие окна» → «Обозреватель модели данных объектов», щелкните правой кнопкой мыши GetStudentGrades в разделе «Импорт функций» и выберите «Редактировать».
Это произведет следующий диалог.
Шаг 18 — Нажмите кнопку с зависимой фиксацией Entities и выберите StudentGrade из выпадающего списка в качестве типа возврата этой хранимой процедуры и нажмите Ok.
Давайте посмотрим на следующий код C #, в котором все оценки будут получены путем передачи идентификатора студента в качестве параметра в хранимой процедуре 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(); } } }
Когда приведенный выше код скомпилирован и выполнен, вы получите следующий вывод:
Course ID: 4022, Title: Microeconomics, Grade: 3.00 Course ID: 4041, Title: Macroeconomics, Grade: 3.50
Мы рекомендуем вам выполнить вышеприведенный пример пошагово для лучшего понимания.