如何:使用存储过程以及 In 和 Out 参数执行查询(实体框架)

本主题提供两个演示如何使用实体框架 执行参数化存储过程的示例。 第一个示例采用一个输入参数并返回实体对象集合。 第二个示例采用一个输入参数和一个输出参数,并在输出参数中返回一个值。 本主题中的示例基于 School 模型。 若要执行这些示例,请将 School 模型添加到您的项目并将项目配置为使用实体框架 . 有关更多信息,请参见如何:使用实体数据模型向导(实体框架)

示例

下面的代码执行 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. 通过添加 GetDepartmentName 存储过程从数据库更新 School 模型。 有关更多信息,请参见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);

}