Entity Framework - กระบวนงานที่จัดเก็บ
Entity Framework ช่วยให้คุณใช้โพรซีเดอร์ที่จัดเก็บไว้ใน Entity Data Model แทนหรือใช้ร่วมกับการสร้างคำสั่งอัตโนมัติ
คุณสามารถใช้กระบวนงานที่จัดเก็บเพื่อดำเนินการตรรกะที่กำหนดไว้ล่วงหน้าบนตารางฐานข้อมูลและหลายองค์กรมีนโยบายที่กำหนดให้ใช้กระบวนงานที่จัดเก็บเหล่านี้
นอกจากนี้ยังสามารถระบุว่า EF ควรใช้โพรซีเดอร์ที่จัดเก็บไว้ของคุณสำหรับการแทรกอัปเดตหรือลบเอนทิตี
แม้ว่าคำสั่งที่สร้างขึ้นแบบไดนามิกจะปลอดภัยมีประสิทธิภาพและโดยทั่วไปดีเท่ากับหรือดีกว่าคำสั่งที่คุณเขียนเอง แต่ก็มีหลายกรณีที่มีขั้นตอนการจัดเก็บอยู่แล้วและแนวปฏิบัติของ บริษัท ของคุณอาจ จำกัด การใช้ตารางโดยตรง
หรือคุณอาจต้องการควบคุมสิ่งที่ดำเนินการในร้านค้าอย่างชัดเจนและต้องการสร้างกระบวนงานที่จัดเก็บไว้
ตัวอย่างต่อไปนี้สร้างโปรเจ็กต์ใหม่จากไฟล์→ใหม่→โปรเจ็กต์
Step 1 - เลือกแอปพลิเคชันคอนโซลจากบานหน้าต่างตรงกลางและป้อน StoredProceduresDemo ในช่องชื่อ
Step 2 - ใน Server explorer คลิกขวาที่ฐานข้อมูลของคุณ
Step 3 - เลือกแบบสอบถามใหม่และป้อนรหัสต่อไปนี้ในตัวแก้ไข T-SQL เพื่อเพิ่มตารางใหม่ในฐานข้อมูลของคุณ
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[StudentGrade]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[StudentGrade](
[EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
[CourseID] [int] NOT NULL,
[StudentID] [int] NOT NULL,
[Grade] [decimal](3, 2) NULL,
CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED (
[EnrollmentID] ASC
)
WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
Step 4 - คลิกขวาที่ตัวแก้ไขและเลือกดำเนินการ
Step 5- คลิกขวาที่ฐานข้อมูลของคุณแล้วคลิกรีเฟรช คุณจะเห็นตารางที่เพิ่มใหม่ในฐานข้อมูลของคุณ
Step 6 - ใน Server explorer ให้คลิกขวาที่ฐานข้อมูลของคุณอีกครั้ง
Step 7 - เลือกแบบสอบถามใหม่และป้อนรหัสต่อไปนี้ในตัวแก้ไข T-SQL เพื่อเพิ่มขั้นตอนการจัดเก็บในฐานข้อมูลของคุณซึ่งจะส่งคืนคะแนนของนักเรียน
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[dbo].[GetStudentGrades]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[GetStudentGrades]
@StudentID int
AS
SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade
WHERE StudentID = @StudentID
'
END
GO
Step 8 - คลิกขวาที่ตัวแก้ไขและเลือกดำเนินการ
Step 9- คลิกขวาที่ฐานข้อมูลของคุณแล้วคลิกรีเฟรช คุณจะเห็นว่ามีการสร้างกระบวนงานที่จัดเก็บไว้ในฐานข้อมูลของคุณ
Step 10 - คลิกขวาที่ชื่อโครงการใน Solution Explorer แล้วเลือกเพิ่ม→รายการใหม่
Step 11 - จากนั้นเลือก ADO.NET Entity Data Model ในบานหน้าต่างเทมเพลต
Step 12 - ป้อน SPModel เป็นชื่อจากนั้นคลิกเพิ่ม
Step 13 - ในกล่องโต้ตอบเลือกเนื้อหาแบบจำลองให้เลือกตัวออกแบบ EF จากฐานข้อมูลจากนั้นคลิกถัดไป
Step 14 - เลือกฐานข้อมูลของคุณแล้วคลิกถัดไป
Step 15 - ในกล่องโต้ตอบเลือกวัตถุฐานข้อมูลของคุณให้คลิกที่ตารางมุมมอง
Step 16 - เลือกฟังก์ชัน GetStudentGradesForCourse ที่อยู่ภายใต้โหนด Stored Procedures and Functions แล้วคลิก Finish
Step 17 - เลือก View → Other Windows → Entity Data Model Browser แล้วคลิกขวา GetStudentGrades ภายใต้ Function Imports แล้วเลือก Edit
มันจะสร้างกล่องโต้ตอบต่อไปนี้
Step 18 - คลิกที่ปุ่มตัวเลือกเอนทิตีและเลือก StudentGrade จากคอมโบบ็อกซ์เป็นประเภทการส่งคืนของกระบวนงานที่เก็บไว้นี้และคลิกตกลง
มาดูรหัส C # ต่อไปนี้ซึ่งจะมีการดึงคะแนนทั้งหมดโดยส่งรหัสนักเรียนเป็นพารามิเตอร์ในขั้นตอนการจัดเก็บ GetStudentGrades
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
int studentID = 22;
var studentGrades = context.GetStudentGrades(studentID);
foreach (var student in studentGrades) {
Console.WriteLine("Course ID: {0}, Title: {1}, Grade: {2} ",
student.CourseID, student.Course.Title, student.Grade);
}
Console.ReadKey();
}
}
}
เมื่อโค้ดด้านบนถูกคอมไพล์และดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้ -
Course ID: 4022, Title: Microeconomics, Grade: 3.00
Course ID: 4041, Title: Macroeconomics, Grade: 3.50
เราขอแนะนำให้คุณดำเนินการตามตัวอย่างข้างต้นในลักษณะทีละขั้นตอนเพื่อความเข้าใจที่ดีขึ้น