猿教程 Logo

Entity Framework使用存储过程

Entity Framework能够根据您的LINQ to Entities或Entity SQL查询自动构建数据库的本机命令,以及构建用于插入,更新或删除数据的命令。 您可能想要覆盖这些步骤,并使用您自己的预定义存储过程。 您可以使用存储过程获取数据或将记录添加/更新/删除到一个或多个数据库表。

数据库中的存储过程和用户定义函数(UDF)表示为实体框架中的函数。 EDM将不具有用于EDM设计器中的存储过程的任何实体。

在这里,我们将添加以下存储过程GetCoursesByStudentId到EDM中。 此过程返回分配给特定学生的所有课程:

CREATE PROCEDURE [dbo].[GetCoursesByStudentId]
    -- Add the parameters for the stored procedure here
    @StudentId int = null
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    -- Insert statements for procedure here
select c.courseid, c.coursename,c.Location, c.TeacherId
from student s 
left outer join studentcourse sc on sc.studentid = s.studentid 
left outer join course c on c.courseid = sc.courseid
where s.studentid = @StudentId
END

首先,使用EF Designer从数据库创建一个新的ADO.Net实体数据模型。


选择GetCoursesByStudentId。 确保选中将选定的存储过程和函数导入到实体模型复选框,然后单击完成。


您将在模型浏览器中看到函数导入中添加了GetCoursesByStudentId和新的复杂类型GetCoursesByStudentId_Result。 每当您将存储过程导入到模型中时,默认情况下它将创建一个名为{sp name} _Result的新复杂类型。


GetCoursesByStudentId返回在课程实体中定义的相同字段。 所以我们不需要为从GetCoursesByStudentId返回的数据添加一个新的复杂类型。 您可以通过右键单击函数导入中的GetCoursesByStudentId并选择编辑来更改它。 检查实体,并从弹出窗口的下拉列表中选择课程,如下所示:



您将在GetCoursesByStudentId的上下文类中看到函数,如下所示:


现在,可以调用GetCoursesByStudentId,并返回如下所示的结果:

using (var context = new SchoolDBEntities())
{
    var courses = context.GetCoursesByStudentId(1);
    foreach (Course cs in courses)
        Console.WriteLine(cs.CourseName);
}

上面显示的代码将执行以下语句:

exec [dbo].[GetCoursesByStudentId] @StudentId=1

在下一章中,您将学习如何使用存储过程进行CUD操作。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/entity/stored-procedure-in-entity-framework.html