다음을 통해 공유


방법: 상속 계층 구조 매핑

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

참고 항목

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

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

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

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

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

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

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

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

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

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

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

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

예시

참고 항목

Visual Studio를 사용하는 경우 개체 관계형 디자이너를 사용하여 상속을 구성할 수 있습니다. 방법: O/R 디자이너를 사용하여 상속 구성을 참조하세요.

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

[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;
}
<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

참고 항목