방법: 계층당 하나의 테이블 상속을 사용하여 개체 쿼리 만들기 및 실행(Entity Framework)
EDM(엔터티 데이터 모델)의 상속은 개체 지향적 프로그래밍에 적용되는 상속과 동일한 이점을 제공합니다. 계층 구조에서 특정 형식의 인스턴스는 함께 작동하거나 하위 형식 중 하나의 인스턴스로 작동할 수 있습니다. 모든 하위 형식은 기본 형식의 속성을 상속하며 필요에 따라 하위 형식에서 구현된 추가적인 속성에 액세스할 수 있습니다.
계층당 하나의 테이블 상속을 사용하여 프로젝트를 만들려면
콘솔 응용 프로그램 프로젝트를 만들고 System.Data.Entity와 System.Runtime.Serialization에 대한 참조를 추가합니다.
방법: 계층당 하나의 테이블 상속을 사용하여 모델 정의(Entity Framework) 항목에서 설명한 상속 모델에서 빌드한 dll에 대한 참조를 추가합니다.
방법: 계층당 하나의 테이블 상속을 사용하여 모델 정의(Entity Framework) 항목의 스키마를 실행 파일과 같은 폴더에 추가합니다.
다음 예제의 내용을 포함하는 응용 프로그램 구성 파일을 추가합니다.
<?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="
Data Source=localhost;
Initial Catalog=SchoolData;Integrated Security=True;
MultipleActiveResultSets=True""
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)