Как выполнить запрос с использованием хранимой процедуры, имеющей входные и выходные параметры (платформа Entity Framework)

В этом разделе приведены два примера выполнения параметризированной хранимой процедуры при помощи платформы Entity Framework . В первом примере имеется один входной параметр и возвращается коллекция объектов сущностей. Во втором примере имеется один входной параметр и один выходной параметр, и значение возвращается в выходном параметре. Примеры в этом разделе основаны на модели School. Чтобы выполнить эти примеры, добавьте School, модель к проекту и настройте проект для использования Entity Framework . Дополнительные сведения см. в разделе Как использовать мастер моделей EDM (платформа Entity Framework).

Пример

В следующем коде выполняется хранимая процедура GetStudentGrades, где параметр StudentId является обязательным. Чтобы выполнить этот пример кода, импортируйте хранимую процедуру GetStudentGrades и укажите сущности CourseGrade в качестве возвращаемого типа. Дополнительные сведения об импорте хранимых процедур см. в разделе How to: Import Stored Procedures.

' Specify the Student ID. 
Dim studentId As Integer = 2

Using context As New SchoolEntities()
    For Each grade As StudentGrade In context.GetStudentGrades(studentId)
        Console.WriteLine("StudentID: " & studentId)
        Console.WriteLine("Student grade: " & grade.Grade)


    Next
End Using
// Specify the Student ID.
int studentId = 2;

using (SchoolEntities context =
    new SchoolEntities())
{
    foreach (StudentGrade grade in
              context.GetStudentGrades(studentId))
    {
        Console.WriteLine("StudentID: " + studentId);
        Console.WriteLine("Student grade: " + grade.Grade);
    }
}

В следующем коде выполняется хранимая процедура GetDepartmentName, а в выходном параметре возвращается имя отдела. Выполнение данного примера кода.

  1. Добавьте в базу данных School следующую процедуру.

    CREATE PROCEDURE [dbo].[GetDepartmentName]
          @ID int,
          @Name nvarchar(50) OUTPUT
          AS
          SELECT @Name = Name FROM Department
          WHERE DepartmentID = @ID
    
  2. Обновите модель School из базы данных, добавив хранимую процедуру GetDepartmentName. Дополнительные сведения см. в разделе How to: Update an .edmx File when the Database Changes.

  3. Импортируйте хранимую процедуру GetDepartmentName, выбрав в качестве возвращаемого типа значение Нет. Дополнительные сведения см. в разделе How to: Import a Stored Procedure.

Using context As New SchoolEntities()
    ' name is an output parameter. 
    Dim name As New ObjectParameter("Name", GetType(String))
    context.GetDepartmentName(1, name)

    Console.WriteLine(name.Value)
End Using
using (SchoolEntities context =
    new SchoolEntities())
{
    // name is an output parameter.
    ObjectParameter name = new ObjectParameter("Name", typeof(String));
    context.GetDepartmentName(1, name);
    Console.WriteLine(name.Value);

}