다음을 통해 공유


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

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

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

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

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

  3. 상속 프로젝트의 스키마를 SchoolDataClient 실행 파일과 같은 폴더에 추가합니다.

  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>

예제

다음 코드는 시스템의 모든 분야에 대한 데이터를 표시합니다.

기본 형식 Departmentforeach 루프에서는 Department 형식에서 파생된 DeptBusiness, DeptEngineeringDeptMusic 형식에 대한 데이터를 표시합니다.

두 번째 foreach 루프에서는 Departments 컬렉션에서 엔지니어링 학교만 가져오는 방법을 보여 줍니다.

OfType 연산자를 사용하면 형식에 따라 소스의 값을 필터링할 수 있습니다.

Departments 컬렉션에는 엔지니어링, 비즈니스 및 음악 분야가 있지만 제네릭 사양은 꺾쇠 괄호 안에 지정된 형식의 분야만 반환합니다.

Option Strict On
Option Explicit On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml
Imports System.Xml.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 contact reference if any.
                    dept.AdministratorReference.Load()
                    If dept.Administrator IsNot Nothing Then
                        Console.WriteLine("Administrator: {0} {1}", _
                            dept.Administrator.FirstName, _
                            dept.Administrator.LastName)
                    End If
                Next

                For Each eDept As DeptEngineering In _
                        objectContext.Departments.OfType(Of DeptEngineering)()
                    Console.WriteLine("{0} LabBudget: {1} FiberOp Budget: {2}", _
                        eDept.Name, eDept.LabBudget.ToString(), _
                        eDept.FiberOpticsBudget.ToString())
                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;

namespace SchoolDataTPTClient
{
    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 contact reference if any.
                        dept.AdministratorReference.Load();
                        if (null != dept.Administrator)
                            Console.WriteLine("Administrator: {0} {1}",
                                         dept.Administrator.FirstName,
                                         dept.Administrator.LastName);
                    }

                    foreach (DeptEngineering eDept in
                        objectContext.Departments.OfType<DeptEngineering>())
                        Console.WriteLine("{0} LabBudget: {1} FiberOp Budget: {2}",
                            eDept.Name, eDept.LabBudget.ToString(), 
                            eDept.FiberOpticsBudget.ToString());
                    }

                }

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

        }
    }
}

참고 항목

작업

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