Entity Framework-테이블 반환 함수

이 장에서는 Entity Framework Designer를 사용하여 TVF (테이블 반환 함수)를 매핑하는 방법과 LINQ 쿼리에서 TVF를 호출하는 방법을 알아 봅니다.

  • TVF는 현재 Database First 워크 플로에서만 지원됩니다.

  • Entity Framework 버전 5에서 처음 도입되었습니다.

  • TVF를 사용하려면 .NET Framework 4.5 이상을 대상으로해야합니다.

  • 저장 프로 시저와 매우 유사하지만 한 가지 중요한 차이점이 있습니다. 즉, TVF의 결과를 구성 할 수 있습니다. 즉, TVF의 결과는 LINQ 쿼리에서 사용할 수 있지만 저장 프로 시저의 결과는 사용할 수 없습니다.

File → New → Project에서 새 프로젝트를 생성하는 다음 예제를 살펴 보겠습니다.

Step 1 − 가운데 창에서 콘솔 응용 프로그램을 선택하고 이름 필드에 TableValuedFunctionDemo를 입력합니다.

Step 2 − 서버 탐색기에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭합니다.

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− 이제 코스에 대한 학생 성적을 반환하는 함수를 만듭니다. T-SQL 편집기에 다음 코드를 입력합니다.

CREATE FUNCTION [dbo].[GetStudentGradesForCourse]

(@CourseID INT)

RETURNS TABLE

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

Step 7 − 편집기를 마우스 오른쪽 버튼으로 클릭하고 실행을 선택합니다.

이제 함수가 생성 된 것을 볼 수 있습니다.

Step 8 − 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 추가 → 새 항목을 선택합니다.

Step 9 − 그런 다음 템플릿 창에서 ADO.NET 엔티티 데이터 모델을 선택합니다.

Step 10 − 이름으로 TVFModel을 입력하고 추가를 클릭합니다.

Step 11 − 모델 콘텐츠 선택 대화 상자에서 데이터베이스에서 EF 디자이너를 선택하고 다음을 클릭합니다.

Step 12 − 데이터베이스를 선택하고 다음을 클릭합니다.

Step 13 − 데이터베이스 개체 선택 대화 상자에서 테이블,보기를 선택합니다.

Step 14 − Stored Procedures and Functions 노드 아래에있는 GetStudentGradesForCourse 함수를 선택하고 Finish를 클릭합니다.

Step 15 −보기 → 다른 창 → 엔티티 데이터 모델 브라우저를 선택하고 함수 가져 오기에서 GetStudentGradesForCourse를 마우스 오른쪽 버튼으로 클릭하고 편집을 선택합니다.

다음 대화 상자가 표시됩니다.

Step 16 − Entities 라디오 버튼을 클릭하고이 함수의 반환 유형으로 콤보 박스에서 Enrollment를 선택하고 Ok를 클릭합니다.

데이터베이스에서 Course ID = 4022에 등록 된 모든 학생의 성적이 검색되는 다음 C # 코드를 살펴 보겠습니다.

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();
      }
   }
}

위의 코드가 컴파일되고 실행되면 다음과 같은 출력을 받게됩니다.

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

더 나은 이해를 위해 위의 예를 단계별로 실행하는 것이 좋습니다.