Share via


방법: 맵 상속 계층 구조(LINQ to SQL)

LINQ에서 상속 매핑을 구현하려면 다음 단계의 설명과 같이 상속 계층 구조의 루트 클래스에 특성 및 특성 속성을 지정해야 합니다. Visual Studio를 사용하는 개발자는 개체 관계형 디자이너를 통해 상속 계층 구조를 매핑할 수 있습니다.

참고참고

서브클래스에는 특수 특성 또는 속성이 필요 없습니다.특히 서브클래스에는 TableAttribute 특성이 없습니다.

상속 계층 구조를 매핑하려면

  1. 루트 클래스에 TableAttribute 특성을 추가합니다.

  2. 또한 루트 클래스에 계층 구조의 각 클래스에 대한 InheritanceMappingAttribute 특성을 추가합니다.

  3. InheritanceMappingAttribute 특성에 대해 Code 속성을 정의합니다.

    이 속성에는 이 데이터 행이 속한 클래스 또는 서브클래스를 나타내기 위해 데이터베이스 테이블의 IsDiscriminator 열에 표시되는 값이 저장됩니다.

  4. 또한 각 InheritanceMappingAttribute 특성에 대해 Type 속성을 추가합니다.

    이 속성에는 키 값이 의미하는 클래스 또는 서브클래스를 지정하는 값이 저장됩니다.

  5. InheritanceMappingAttribute 특성 중 하나의 특성에만 IsDefault 속성을 추가합니다.

    이 속성은 데이터베이스 테이블의 판별자 값이 상속 매핑의 어떠한 Code 값과도 일치하지 않는 경우 대체(fallback) 매핑을 지정하는 데 사용됩니다.

  6. ColumnAttribute 특성에 대해 IsDiscriminator 속성을 추가합니다.

    이 속성은 열에 Code 값이 저장됨을 의미합니다.

예제

참고참고

Visual Studio를 사용하는 경우 개체 관계형 디자이너를 통해 상속을 구성할 수 있습니다.

다음 코드 예제에서는 Vehicle이 루트 클래스로 정의되어 있으며 이전 단계는 LINQ의 계층 구조를 설명하기 위해 구현되었습니다. 다음 그림에서는 관계를 보여 줍니다.

상속 다이어그램

<Table()> _
<InheritanceMapping(Code:="C", Type:=GetType(Car))> _
<InheritanceMapping(Code:="T", Type:=GetType(Truck))> _
<InheritanceMapping(Code:="V", Type:=GetType(Vehicle), _
    IsDefault:=True)> _
Public Class Vehicle
    <Column(IsDiscriminator:=True)> _
        Private DiscKey As String
    <Column(IsPrimaryKey:=True)> _
        Private VIN As String
    <Column()> _
        Private MfgPlant As String
End Class

Public Class Car
    Inherits Vehicle
    <Column()> _
        Private TrimCode As Integer
    <Column()> _
        Private ModelName As String
End Class

Public Class Truck
    Inherits Vehicle
    <Column()> _
        Private Tonnage As Integer
    <Column()> _
        Private Axles As Integer
End Class
[Table]
[InheritanceMapping(Code = "C", Type = typeof(Car))]
[InheritanceMapping(Code = "T", Type = typeof(Truck))]
[InheritanceMapping(Code = "V", Type = typeof(Vehicle),
    IsDefault = true)]
public class Vehicle
{
    [Column(IsDiscriminator = true)]
    public string DiscKey;
    [Column(IsPrimaryKey = true)]
    public string VIN;
    [Column]
    public string MfgPlant;
}
public class Car : Vehicle
{
    [Column]
    public int TrimCode;
    [Column]
    public string ModelName;
}

public class Truck : Vehicle
{
    [Column]
    public int Tonnage;
    [Column]
    public int Axles;
}

참고 항목

개념

상속 지원(LINQ to SQL)

기타 리소스

방법: 코드 편집기를 사용하여 엔터티 클래스 사용자 지정(LINQ to SQL)