Stored Procedure trong Entity Framework

Trong bài viết này, hãy cùng Comdy tìm hiểu về Stored Procedure trong Entity Framework hay Stored Procedure trong SQL server. Đây là một phần kiến thức đặc biệt quan trọng, là công cụ giúp bạn giải quyết các chương trình, bài toàn hiệu quả, chính xác. Cùng theo dõi nhé.

Tổng quan về Entity Framework stored procedure

Stored procedure là gì?

Stored procedure là gì
Stored procedure là một khối mã SQL được lưu trữ trong cơ sở dữ liệu và có thể được gọi và thực thi từ xa bằng cách sử dụng tên của nó

Procedure trong sql server hay stored procedure trong Entity Framework là một khối mã SQL được lưu trữ trong cơ sở dữ liệu và có thể được gọi và thực thi từ xa bằng cách sử dụng tên của nó. Stored procedure thường được sử dụng để thực hiện một loạt các câu lệnh SQL phức tạp, thực hiện xử lý logic, và trả về kết quả cho ứng dụng gọi nó.

Bạn có thể muốn ghi đè các bước này bằng cách sử dụng các stored procedure trong sql đã được bạn định nghĩa trước.

Bạn có thể sử dụng các stored procedure để lấy dữ liệu hoặc thêm mới / cập nhật / xóa các bản ghi cho một hoặc nhiều bảng trong cơ sở dữ liệu.

Entity Framework API tạo một phương thức thay vì một thực thể trong EDM cho mỗi stored procedure entity framework và function do người dùng tự định nghĩa (UDF) trong cơ sở dữ liệu.

Ví dụ về stored procedure in Entity Framework core

Chúng ta sẽ bắt đầu sử dụng stored procedure để lấy dữ liệu từ cơ sở dữ liệu.

Tạo stored procedure trong Entity Framework (sproc trong Entity Framework)

Đầu tiên, tạo stored procedure tên là GetCoursesByStudentId trong cơ sở dữ liệu SQL Server của bạn. Stored procedure trong mysql này trả về tất cả các khóa học của một sinh viên cụ thể.

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 join studentcourse sc on sc.studentid = s.studentid 
        left join course c on c.courseid = sc.courseid
    where s.studentid = @StudentId
END

Thêm mô hình dữ liệu thực thể

Thêm mô hình dữ liệu thực thể
Hướng dẫn cách thêm mô hình dữ liệu thực thể trong Entity Framework 

Bây giờ, chúng ta sẽ thêm mô hình dữ liệu thực thể mới bằng cách nhấp chuột phải vào dự án trong Solution Explorer trong Visual Studio -> Add -> New Item. Điều này sẽ mở một cửa sổ bật lên Add New Item. Trong cửa sổ bật lên, chọn ADO.NET Entity Data Model, đặt tên cho EDM và nhấp vào nút Add. Điều này sẽ mở Entity Data Model Wizard. Chọn EF Designer from database và nhấp vào nút Next, như được trình bày ở bên dưới.

Kết nối với cơ sở dữ liệu hiện tại

Tiếp theo, bạn cần tạo kết nối với cơ sở dữ liệu hiện tại của bạn. Nếu đây là lần đầu tiên bạn tạo EDM cho cơ sở dữ liệu của mình, thì bạn cần tạo kết nối mới bằng cách nhấp vào nút New Connection…. Ở đây, chúng tôi đã có kết nối, vì vậy chúng tôi sẽ chọn cơ sở dữ liệu từ danh sách thả xuống và nhấp vào nút Next.

Trong bước này, chọn stored procedure GetCoursesByStudentId bên dưới Stored Procedures and Functions. Đừng quên đánh dấu vào hộp kiểm Import selected stored procedures and functions into the entity model và sau đó nhấp vào Finish.

Bạn sẽ thấy stored procedure GetCoursesByStudentId được thêm vào trong Stored Procedures/Functions và Function Imports như hình bên dưới, với kiểu dữ liệu phức tạp là GetCoursesByStudentId_Result trong Model Browser.

Bất cứ khi nào thêm một stored procedure trong sql server hoặc UDF vào EDM, nó sẽ tạo một kiểu dữ liệu phức tạp mới với tên là {sp name}_Result theo mặc định.

Stored procedure GetCoursesByStudentId trả vềcác trường được định nghĩa trong thực thể Course. Vì vậy, chúng ta không cần thêm một kiểu dữ liệu phức tạp mới cho GetCoursesByStudentId.

Sử dụng phương thức GetCoursesByStudentId

Sử dụng phương thức GetCoursesByStudentId
Sử dụng phương thức GetCoursesByStudentId như thế nào? 

Bây giờ, bạn có thể sử dụng phương thức GetCoursesByStudentId để lấy dữ liệu như ví dụ bên dưới:

using (var context = new SchoolDBEntities())
{
    var courses = context.GetCoursesByStudentId(1);

    foreach (Course cs in courses)
    {
        Console.WriteLine(cs.CourseName);
    }
}

Ví dụ trên sẽ thực thi câu lệnh SQL sau trong cơ sở dữ liệu:

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

Thao tác CUD sử dụng stored procedure trong Entity Framework C

Trong phần này, chúng ta sẽ sử dụng stored procedure cho các thao tác CUD (Create, Update, Delete) cho một thực thể khi chúng ta gọi phương thức SaveChanges() theo cách tiếp cận Database First.

Chúng tôi sẽ sử dụng các stored procedure sau đây cho thực thể Student:

  • sp_InsertStudent: Thêm một sinh viên mới vào cơ sở dữ liệu.
  • sp_UpdateStudent: Cập nhật một sinh viên trong cơ sở dữ liệu.
  • sp_DeleteStudent: Xóa một sinh viên trong cơ sở dữ liệu.

Dưới đây là các tập lệnh SQL cho mỗi thủ tục được lưu trữ.

Stored procedure sp_InsertStudent

CREATE PROCEDURE [dbo].[sp_InsertStudent]
    -- 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

Stored procedure 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

Stored procedure 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 [dbo].[Student]
    where StudentID = @StudentId

END

Table-Valued Function trong Entity Framework

Table-Valued Function trong Entity Framework
Sử dụng Table-Valued Function trong Entity Framework tương tự như stored procedure

Table-Valued Function (TVF) tương tự như stored procedure, ngoại trừ một điểm khác biệt chính: kết quả của table-valued function có thể được sử dụng trong truy vấn LINQ-to-Entity.

Sau đây là một table-valued function mẫu có tên GetCourseListByStudentID trong cơ sở dữ liệu SQL Server, sẽ trả về tất cả các khóa học của một sinh viên cụ thể.

USE [SchoolDB]
GO
/****** Object:  UserDefinedFunction [dbo].[GetCourseListByStudentID]  */  
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[GetCourseListByStudentID]
(    
    -- Add the parameters for the function here
    @studentID int
)
RETURNS TABLE 
AS
RETURN 
(
    -- Add the SELECT statement with parameter references 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
)

Có nên sử dụng Entity Framework? (using stored procedure in entity framework)

Có nên sử dụng Entity Framework
Việc quyết định sử dụng Entity Framework (EF) hay không phụ thuộc vào nhiều yếu tố

Trên thực tế thì việc quyết định sử dụng Entity Framework (EF) hay không phụ thuộc vào nhiều yếu tố. Trong đó bao gồm loại ứng dụng bạn đang xây dựng, mô hình dữ liệu của bạn và các yêu cầu cụ thể của dự án. Dưới đây là một số lợi ích khi sử dụng Entity Framework mà bạn có thể tham khảo:

  • Tăng tốc phát triển: EF cung cấp một lớp trừu tượng cho cơ sở dữ liệu, giúp giảm thiểu việc phải viết mã SQL và giúp tăng tốc độ phát triển ứng dụng.
  • Dễ bảo trì: EF cung cấp một cách thuận tiện để quản lý mô hình dữ liệu, và nó tự động tạo ra các truy vấn SQL phù hợp.
  • Tích hợp linh hoạt: Nó tích hợp tốt với nhiều loại cơ sở dữ liệu, giúp bạn chuyển đổi giữa các hệ quản trị cơ sở dữ liệu một cách dễ dàng hơn.
  • Quản lý thay đổi dữ liệu: EF giúp quản lý việc thay đổi cơ sở dữ liệu thông qua các chức năng như Code First Migration.

Cú pháp create procedure trong SQL server (tạo procedure trong sql)

Cú pháp tạo thủ tục trong sql hay viết procedure trong sql như sau:

CREATE PROCEDURE procedure_name
— parameter declarations, if any
@parameter1 datatype,
@parameter2 datatype
AS
— SQL statements here
— body of the stored procedure
GO

Ví dụ:

CREATE PROCEDURE GetEmployeeByID
@EmployeeID INT
AS
SELECT * FROM Employees
WHERE EmployeeID = @EmployeeID
GO

Set nocount on trong SQL như thế nào?

Set nocount on trong SQL như thế nào
Khi SET NOCOUNT ON được thiết lập, thông báo này sẽ không được hiển thị, giúp giảm lượng dữ liệu truyền về từ cơ sở dữ liệu và cải thiện hiệu suấ

Câu lệnh SET NOCOUNT ON được sử dụng để tắt thông báo số hàng bị ảnh hưởng sau khi thực hiện một câu lệnh SQL.

Cú pháp:

SET NOCOUNT ON;
— Các câu lệnh SQL ở đây
SET NOCOUNT OFF; — Để bật lại thông báo số hàng bị ảnh hưởng (mặc định là OFF)

Khi SET NOCOUNT ON được kích hoạt, SQL Server sẽ không hiển thị thông báo số hàng bị ảnh hưởng sau mỗi câu lệnh INSERT, UPDATE, DELETE, hoặc EXECUTE. Điều này có thể hữu ích trong các trường hợp nơi bạn không quan tâm đến số hàng bị ảnh hưởng và muốn giảm chi phí về mạng và tăng tốc độ thực hiện truy vấn.

Mối quan hệ giữa entity framework vs stored procedures

Entity Framework (EF) và stored procedures là hai khái niệm liên quan đến làm việc với cơ sở dữ liệu trong môi trường phát triển ứng dụng. Mối quan hệ giữa stored procedure vs entity framework có thể hiểu như sau:

  • Tích hợp: EF có thể sử dụng stored procedures để thực hiện các thao tác trên cơ sở dữ liệu thay vì tạo các truy vấn SQL trực tiếp. Điều này giúp tách biệt logic cơ sở dữ liệu và logic ứng dụng.
  • Hiệu suất: Stored procedures thường được sử dụng để cải thiện hiệu suất, và EF có thể gọi stored procedures để thực hiện các thao tác nhanh chóng mà không cần phải tạo các truy vấn LINQ phức tạp.
  • Tùy chọn sử dụng: Bạn có thể sử dụng EF mà không cần stored procedures, hoặc bạn có thể tích hợp stored procedures vào ứng dụng EF của mình để tirnh giữa sức mạnh của cả hai.

Kết lại

Trên đây là toàn bộ chia sẻ của Comdy về Stored Procedure trong Entity Framework. Hi vọng những thông tin trong bài viết này là bổ ích và ý nghĩa với bạn. Xin cám ơn.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *