Khung thực thể - Chức năng định giá bằng bảng

Trong chương này, chúng ta hãy tìm hiểu cách ánh xạ các Hàm có giá trị trong bảng (TVF) bằng cách sử dụng Trình thiết kế khung thực thể và cách gọi một TVF từ truy vấn LINQ.

  • TVF hiện chỉ được hỗ trợ trong dòng công việc Cơ sở dữ liệu đầu tiên.

  • Nó được giới thiệu lần đầu tiên trong Entity Framework phiên bản 5.

  • Để sử dụng TVF, bạn phải nhắm mục tiêu .NET Framework 4.5 trở lên.

  • Nó rất giống với các thủ tục được lưu trữ nhưng có một điểm khác biệt chính, tức là, kết quả của TVF có thể tổng hợp được. Điều này có nghĩa là kết quả từ TVF có thể được sử dụng trong một truy vấn LINQ trong khi kết quả của một thủ tục được lưu trữ thì không.

Hãy xem ví dụ sau về việc tạo một dự án mới từ Tệp → Mới → Dự án.

Step 1 - Chọn Ứng dụng bảng điều khiển từ ngăn giữa và nhập TableValuedFunctionDemo vào trường tên.

Step 2 - Trong Trình thám hiểm máy chủ, nhấp chuột phải vào cơ sở dữ liệu của bạn.

Step 3 - Chọn Truy vấn Mới và nhập mã sau vào trình soạn thảo T-SQL để thêm một bảng mới vào cơ sở dữ liệu của bạn.

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 - Nhấp chuột phải vào trình soạn thảo và chọn Execute.

Step 5- Nhấp chuột phải vào cơ sở dữ liệu của bạn và nhấp vào làm mới. Bạn sẽ thấy bảng mới được thêm vào cơ sở dữ liệu của mình.

Step 6- Bây giờ hãy tạo một hàm sẽ trả về điểm của học sinh cho khóa học. Nhập mã sau vào trình soạn thảo T-SQL.

CREATE FUNCTION [dbo].[GetStudentGradesForCourse]

(@CourseID INT)

RETURNS TABLE

RETURN
   SELECT [EnrollmentID],
      [CourseID],
      [StudentID],
      [Grade]
   FROM   [dbo].[StudentGrade]
   WHERE  CourseID = @CourseID

Step 7 - Nhấp chuột phải vào trình soạn thảo và chọn Execute.

Bây giờ bạn có thể thấy rằng hàm đã được tạo.

Step 8 - Nhấp chuột phải vào tên dự án trong Solution Explorer và chọn Add → New Item.

Step 9 - Sau đó chọn ADO.NET Entity Data Model trong khung Templates.

Step 10 - Nhập TVFModel làm tên, sau đó nhấp vào Thêm.

Step 11 - Trong hộp thoại Chọn Nội dung Mô hình, chọn trình thiết kế EF từ cơ sở dữ liệu, rồi bấm Tiếp theo.

Step 12 - Chọn cơ sở dữ liệu của bạn và nhấp vào Tiếp theo.

Step 13 - Trong hộp thoại Chọn đối tượng cơ sở dữ liệu của bạn chọn bảng, dạng xem.

Step 14 - Chọn chức năng GetStudentGradesForCourse nằm dưới nút Thủ tục và Chức năng đã Lưu trữ và nhấp vào Kết thúc.

Step 15 - Chọn Chế độ xem → Windows khác → Trình duyệt mô hình dữ liệu thực thể và nhấp chuột phải vào GetStudentGradesForCourse bên dưới Nhập hàm và chọn Chỉnh sửa.

Bạn sẽ thấy hộp thoại sau.

Step 16 - Nhấp vào nút radio Entities và chọn Enrollment từ combobox làm loại trả về của Chức năng này và nhấp Ok.

Chúng ta hãy xem mã C # sau đây trong đó tất cả các điểm của sinh viên sẽ được truy xuất những người đã đăng ký khóa học ID = 4022 trong cơ sở dữ liệu.

class Program {

   static void Main(string[] args) {

      using (var context = new UniContextEntities()) {

         var CourseID = 4022;

         // Return all the best students in the Microeconomics class.
         var students = context.GetStudentGradesForCourse(CourseID);

         foreach (var result in students) {
            Console.WriteLine("Student ID:  {0}, Grade: {1}",
               result.StudentID, result.Grade);
         }

         Console.ReadKey();
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ nhận được kết quả sau:

Student ID: 1, Grade: 2
Student ID: 4, Grade: 4
Student ID: 9, Grade: 3.5

Chúng tôi khuyên bạn nên thực hiện ví dụ trên theo cách từng bước để hiểu rõ hơn.