TVF(테이블 반환 함수)

참고 항목

EF5 이상만 - 이 페이지에서 다루는 기능, API 등은 Entity Framework 5에 도입되었습니다. 이전 버전을 사용하는 경우 이 정보의 일부 또는 전체가 적용되지 않습니다.

비디오 및 단계별 연습에서는 Entity Framework 디자이너를 사용하여 TVF(테이블 반환 함수)를 매핑하는 방법을 보여줍니다. LINQ 쿼리에서 TVF를 호출하는 방법도 보여줍니다.

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

TVF 지원은 Entity Framework 버전 5에 도입되었습니다. 테이블 반환 함수, 열거형 및 공간 형식과 같은 새로운 기능을 사용하려면 .NET Framework 4.5를 대상으로 해야 합니다. Visual Studio 2012는 기본적으로 .NET 4.5를 대상으로 합니다.

TVF는 결과가 구성 가능하다는 한 가지 주요 차이점을 제외하고는 저장 프로시저와 매우 유사합니다. 즉, 저장 프로시저의 결과는 사용할 수 없지만 TVF의 결과는 LINQ 쿼리에 사용할 수 있습니다.

비디오 보기

발표자: 줄리아 코르니치

WMV | MP4 | WMV(ZIP)

필수 구성 요소

이 연습을 완료하려면 다음을 수행해야 합니다.

Project 설정

  1. Visual Studio를 엽니다.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
  3. 왼쪽 창에서 Visual C#을 클릭한 다음 콘솔 템플릿을 선택합니다.
  4. 프로젝트의 이름으로 TVF를 입력하고 확인을 클릭합니다.

데이터베이스에 TVF 추가

  • 보기 -> SQL Server 개체 탐색기를 선택합니다.
  • LocalDB가 서버 목록에 없는 경우 SQL Server를 마우스 오른쪽 단추로 클릭하고 SQL Server추가 기본값 사용 Windows 인증을 선택하여 LocalDB 서버에 연결합니다.
  • LocalDB 노드 확장
  • 데이터베이스 노드 아래에서 School 데이터베이스 노드를 마우스 오른쪽 단추로 클릭하고 새 쿼리... 를 선택합니다.
  • T-SQL 편집기에서 다음의 TVF 정의를 붙여넣습니다.
CREATE FUNCTION [dbo].[GetStudentGradesForCourse]

(@CourseID INT)

RETURNS TABLE

RETURN
    SELECT [EnrollmentID],
           [CourseID],
           [StudentID],
           [Grade]
    FROM   [dbo].[StudentGrade]
    WHERE  CourseID = @CourseID
  • T-SQL 편집기에서 마우스 오른쪽 단추를 클릭하고 실행을 선택합니다.
  • GetStudentGradesForCourse 함수가 School 데이터베이스에 추가됨

 

모델 만들기

  1. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 항목을 클릭합니다.
  2. 왼쪽 메뉴에서 데이터를 선택한 다음 템플릿 창에서 ADO.NET 엔터티 데이터 모델을 선택합니다.
  3. 모델 이름에 TVFModel.edmx를 입력하고 추가를 클릭합니다.
  4. 모델 콘텐츠 선택 대화 상자에서 데이터베이스에서 생성을 선택한 후 다음을 클릭합니다.
  5. 새 연결을 클릭하고 서버 입력 텍스트 상자에 (localdb)\mssqllocaldb를 입력하고 데이터베이스 이름에 School을 입력한 다음 확인을 클릭합니다.
  6. 데이터베이스 개체 선택 대화 상자의 테이블 노드 아래에서 Person, StudentGradeCourse 테이블을 선택합니다.
  7. 저장 프로시저 및 함수 노드 아래에 있는 GetStudentGradesForCourse 함수를 선택합니다. Visual Studio 2012부터 엔터티 디자이너를 사용하여 저장 프로시저 및 함수를 일괄 가져올 수 있습니다.
  8. 마침을 클릭합니다.
  9. 모델을 편집하기 위한 디자인 화면을 제공하는 엔터티 디자이너가 표시됩니다. 데이터베이스 개체 선택 대화 상자에서 선택한 모든 개체가 모델에 추가됩니다.
  10. 기본적으로 가져온 각 저장 프로시저 또는 함수의 결과 도형은 자동으로 엔터티 모델의 새로운 복합 형식이 됩니다. 그러나 GetStudentGradesForCourse 함수의 결과를 StudentGrade 엔터티에 매핑하려면 디자인 화면을 마우스 오른쪽 단추로 클릭하고 모델 브라우저에서 모델 브라우저를 선택하고 함수 가져오기를 선택한 다음 GetStudentGradesForCourse 함수를 두 번 클릭합니다. 함수 가져오기 편집 대화 상자에서 엔터티를 선택하고 StudentGrade를 선택합니다.

데이터 유지 및 검색

Main 메서드가 정의된 파일을 엽니다. Main 함수에 다음 코드를 추가합니다.

다음 코드에서는 테이블 반환 함수를 사용하는 쿼리를 빌드하는 방법을 보여줍니다. 쿼리는 결과를 관련 과정 제목과 성적이 3.5 이상인 관련 학생이 포함된 익명 형식으로 투영합니다.

using (var context = new SchoolEntities())
{
    var CourseID = 4022;
    var Grade = 3.5M;

    // Return all the best students in the Microeconomics class.
    var students = from s in context.GetStudentGradesForCourse(CourseID)
                            where s.Grade >= Grade
                            select new
                            {
                                s.Person,
                                s.Course.Title
                            };

    foreach (var result in students)
    {
        Console.WriteLine(
            "Couse: {0}, Student: {1} {2}",
            result.Title,  
            result.Person.FirstName,  
            result.Person.LastName);
    }
}

애플리케이션을 컴파일하고 실행합니다. 프로그램에서는 다음이 출력됩니다.

Couse: Microeconomics, Student: Arturo Anand
Couse: Microeconomics, Student: Carson Bryant

요약

이 연습에서는 Entity Framework 디자이너를 사용하여 TVF(테이블 반환 함수)를 매핑하는 방법을 살펴보았습니다. LINQ 쿼리에서 TVF를 호출하는 방법도 설명했습니다.