Cómo: Ejecutar un consulta utilizando un procedimiento almacenado con parámetros IN y OUT (Entity Framework)

En este tema se proporcionan dos ejemplos de cómo ejecutar un procedimiento almacenado parametrizado con Entity Framework . En el primer ejemplo se toma un parámetro de entrada y se devuelve una colección de objetos entidad. En el segundo ejemplo se toma un parámetro de entrada y un parámetro de salida y se devuelve un valor en el parámetro de salida. Los ejemplos de este tema se basan en el modelo School. Para seguir estos ejemplos, agregue el Modelo School al proyecto y configúrelo para usar Entity Framework . Para obtener más información, vea Cómo usar el Asistente para Entity Data Model (Entity Framework).

Ejemplo

El código siguiente ejecuta un procedimiento almacenado GetStudentGrades donde StudentId es un parámetro necesario. Para ejecutar este ejemplo de código, importe el procedimiento almacenado GetStudentGrades y especifique las entidades CourseGrade como un tipo de valor devuelto. Para obtener información sobre cómo importar un procedimiento almacenado, vea 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);
    }
}

El siguiente código ejecuta el procedimiento almacenado GetDepartmentName, que devuelve el nombre del departamento en el parámetro de salida. Para ejecutar este ejemplo de código:

  1. Agregue el siguiente procedimiento a la base de datos School:

    CREATE PROCEDURE [dbo].[GetDepartmentName]
          @ID int,
          @Name nvarchar(50) OUTPUT
          AS
          SELECT @Name = Name FROM Department
          WHERE DepartmentID = @ID
    
  2. Actualice el modelo School desde la base de datos agregando el procedimiento almacenado GetDepartmentName. Para obtener más información, vea How to: Update an .edmx File when the Database Changes.

  3. Importe el procedimiento almacenado GetDepartmentName y especifique Ninguno como tipo de valor devuelto de este procedimiento almacenado. Para obtener más información, vea 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);

}