猿教程 Logo

Entity Framework使用存储过程进行CRUD操作

在上一章中,我们已经了解了如何使用存储过程获取数据。 在本章中,我们将使用存储过程进行CUD(创建,更新,删除)操作使用DbContext。 这意味着上下文将在context.SaveChanges()上执行存储过程而不是DDL语句。

我们将使用以下存储过程:

  1. sp_InsertStudentInfo存储过程,用于将新学生插入数据库

  2. sp_UpdateStudent更新学生

  3. sp_DeleteStudent删除数据库中的学生。

Sp_InsertStudentInfo:

CREATE PROCEDURE [dbo].[sp_InsertStudentInfo]
    -- Add the parameters for the stored procedure here
    @StandardId int = null,
    @StudentName varchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
        INSERT INTO [SchoolDB].[dbo].[Student]([StudentName],[StandardId])
        VALUES(@StudentName, @StandardId)
    SELECT SCOPE_IDENTITY() AS StudentId
END

sp_UpdateStudent:

CREATE PROCEDURE [dbo].[sp_UpdateStudent]
    -- Add the parameters for the stored procedure here
    @StudentId int,
    @StandardId int = null,
    @StudentName varchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    Update [SchoolDB].[dbo].[Student] 
    set StudentName = @StudentName,StandardId = @StandardId
    where StudentID = @StudentId;
END

sp_DeleteStudent

CREATE PROCEDURE [dbo].[sp_DeleteStudent]
    -- Add the parameters for the stored procedure here
    @StudentId int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    DELETE FROM [dbo].[Student]
    where StudentID = @StudentId
END

首先,将这些存储过程添加到EDM中,并确保将所选的存储过程和函数导入实体模型复选框未选中,因为我们将直接使用Student实例来映射这些过程。


现在,模型浏览器将存储过程添加到存储模型中,而不是在函数导入中


在EDM设计器中,右键单击学生实体,然后选择存储过程映射以打开映射详细信息:


在映射详细信息中,您将看到<Select Insert Function>, <Select Update Function>, and <Select Delete Function>。 为每一个选择适当的存储过程,例如。 为插入函数选择sp_InsertStudentInfo,如下所示:


sp_InsertStudentInfo返回新的自动生成的StudentId。 使用Student Entity的StudentID映射,如下所示:


完成插入,更新和删除过程的映射,如下所示:


现在,我们需要在执行之前验证它,以确保不会有运行时错误。 要完成此操作,请在设计器中右键单击学生实体,然后单击验证,并确保没有警告或错误:


现在您可以添加,更新和删除学生,如下所示:

using (var context = new SchoolDBEntities())
{
    Student newStudent = new Student() { StudentName = "New Student using SP"};
    context.Students.Add(newStudent);
    //will execute sp_InsertStudentInfo 
    context.SaveChanges();
    newStudent.StudentName = "Edited student using SP";
    //will execute sp_UpdateStudent
    context.SaveChanges();
    context.Students.Remove(newStudent);
    //will execute sp_DeleteStudentInfo 
    context.SaveChanges();
}

上面显示的代码将对每个SaveChanges()执行以下存储过程:

exec [dbo].[sp_InsertStudentInfo] @StandardId=NULL,@StudentName='New Student using SP'
go
exec [dbo].[sp_UpdateStudent] @StudentId=47,@StandardId=NULL,@StudentName='Edited student using SP'
go
exec [dbo].[sp_DeleteStudent] @StudentId=47
go

注意:一旦上下文在添加新学生后调用SaveChanges,它会将新的StudentID分配给Student实体的StudentID属性,因为sp_InsertStudentInfo返回StudentId。 这是必要的,以便使用该实体对象进行进一步操作。



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