다음을 통해 공유


방법: 계층당 하나의 테이블 상속을 사용하여 개체 쿼리 만들기 및 실행(Entity Framework)

EDM(엔터티 데이터 모델)의 상속은 개체 지향적 프로그래밍에 적용되는 상속과 동일한 이점을 제공합니다. 계층 구조에서 특정 형식의 인스턴스는 함께 작동하거나 하위 형식 중 하나의 인스턴스로 작동할 수 있습니다. 모든 하위 형식은 기본 형식의 속성을 상속하며 필요에 따라 하위 형식에서 구현된 추가적인 속성에 액세스할 수 있습니다.

계층당 하나의 테이블 상속을 사용하여 프로젝트를 만들려면

  1. 콘솔 응용 프로그램 프로젝트를 만들고 System.Data.EntitySystem.Runtime.Serialization에 대한 참조를 추가합니다.

  2. 방법: 계층당 하나의 테이블 상속을 사용하여 모델 정의(Entity Framework) 항목에서 설명한 상속 모델에서 빌드한 dll에 대한 참조를 추가합니다.

  3. 방법: 계층당 하나의 테이블 상속을 사용하여 모델 정의(Entity Framework) 항목의 스키마를 실행 파일과 같은 폴더에 추가합니다.

  4. 다음 예제의 내용을 포함하는 응용 프로그램 구성 파일을 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings><add name="SchoolDataLibContainer" 
   connectionString=
   "metadata=res://*/SchoolDataLib.csdl|
   res://*/SchoolDataLib.ssdl|
   res://*/SchoolDataLib.msl;provider=System.Data.SqlClient;
   provider connection string=&quot;
   Data Source=localhost;
   Initial Catalog=SchoolData;Integrated Security=True;
   MultipleActiveResultSets=True&quot;" 
   providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

예제

다음 코드에서는 SchoolDataEntitiesObjectContext에서 People 컬렉션의 형식 인스턴스를 열거하는 foreach 루프를 통해 계층 구조에 있는 모든 형식의 인스턴스를 표시합니다.

각 인스턴스의 형식은 GetType 메서드 호출을 통해 표시됩니다.

두 번째 foreach 루프에서는 People 컬렉션에 대해 OfType 필터를 사용하여 Instructor 형식의 인스턴스만 반환합니다.

Instructor 형식에만 HireDate 속성이 포함됩니다. 코드는 쿼리에서 반환된 강사의 성 및 이름과 함께 HireDate를 표시합니다.

Option Strict On
Option Explicit On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports SchoolDataLib

Module Module1

    Sub Main()
        Try
            Using objectContext As SchoolDataLibContainer = New SchoolDataLibContainer()
                ' Display departments and administrators.
                For Each dept As Department In objectContext.Departments
                    Console.WriteLine("School: {0} Budget: {1}", _
                        dept.Name, dept.Budget)

                    ' Load associated person reference.
                    dept.AdministratorReference.Load()
                    If dept.Administrator IsNot Nothing Then
                        Console.WriteLine("Administrator: {0} {1}", _
                            dept.Administrator.FirstName, _
                            dept.Administrator.LastName)
                    End If

                    For Each student As Student In objectContext.People.OfType(Of Student)()
                        Console.WriteLine("Student: {0} {1}", student.FirstName, _
                            student.LastName)
                    Next

                    For Each person As Person In objectContext.People
                        Console.WriteLine("{0} Name: {1}", _
                            person.GetType().Name, person.LastName)
                    Next

                    For Each instructor In objectContext.People. _
                            OfType(Of Instructor)()
                        Console.WriteLine("Instructor: {0} {1} Hire Date: {2}", _
                            instructor.FirstName, _
                            instructor.LastName, _
                            instructor.HireDate)
                    Next

                Next
            End Using

        Catch ex As System.Data.MappingException
            Console.WriteLine(ex.ToString())
        Catch ex As System.Data.UpdateException
            Console.WriteLine(ex.ToString())
        End Try
    End Sub

End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SchoolDataLib;
using System.Data.Objects;

namespace SchoolDataClient
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (SchoolDataLibContainer objectContext =
                                      new SchoolDataLibContainer ())
                {
                    // Display departments and administrators.
                    foreach (Department dept in objectContext.Departments)
                    {
                        Console.WriteLine("School: {0} Budget: {1}",
                            dept.Name,
                            dept.Budget);

                        // Load associated person reference.
                        dept.AdministratorReference.Load();
                        if (null != dept.Administrator)
                            Console.WriteLine("Administrator: {0} {1}",
                                         dept.Administrator.FirstName,
                                         dept.Administrator.LastName);
                    }

                    foreach (Student student in
                        objectContext.People.OfType<Student>())
                    {
                        Console.WriteLine("Student: {0} {1}", student.FirstName,
                            student.LastName);

                    }

                    
                    foreach (Person person in objectContext.People)
                        Console.WriteLine("{0} Name: {1}",
                            person.GetType().Name,
                            person.LastName);

                    foreach (Instructor instructor in
                        objectContext.People.OfType<Instructor>())
                        Console.WriteLine("Instructor: {0} {1} Hire Date: {2}",
                            instructor.FirstName,
                            instructor.LastName,
                            instructor.HireDate);

                    objectContext.Connection.Close();
                }
            }

            catch (System.Data.MappingException e)
            {
                Console.WriteLine(e.ToString());
            }
            catch (System.Data.UpdateException e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

참고 항목

작업

방법: 계층당 하나의 테이블 상속을 사용하여 모델 정의(Entity Framework)

개념

상속(EDM)