Учебники

Entity Framework — Хранимые процедуры

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 — Выберите вашу базу данных и нажмите Далее.

База данных 1

Шаг 15 — В диалоговом окне «Выбор объектов базы данных» щелкните таблицы, просмотры.

Объекты базы данных

Шаг 16. Выберите функцию GetStudentGradesForCourse, расположенную в узле «Хранимые процедуры и функции», и нажмите «Готово».

Шаг 17 — Выберите «Вид» → «Другие окна» → «Обозреватель модели данных объектов», щелкните правой кнопкой мыши GetStudentGrades в разделе «Импорт функций» и выберите «Редактировать».

Entity Browser

Это произведет следующий диалог.

Диалог Entity Browser

Шаг 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

Мы рекомендуем вам выполнить вышеприведенный пример пошагово для лучшего понимания.