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
더 나은 이해를 위해 위의 예를 단계별로 실행하는 것이 좋습니다.