방법: 맵 상속 계층 구조(LINQ to SQL)
LINQ에서 상속 매핑을 구현하려면 다음 단계의 설명과 같이 상속 계층 구조의 루트 클래스에 특성 및 특성 속성을 지정해야 합니다. Visual Studio를 사용하는 개발자는 개체 관계형 디자이너를 통해 상속 계층 구조를 매핑할 수 있습니다.
참고 |
---|
서브클래스에는 특수 특성 또는 속성이 필요 없습니다.특히 서브클래스에는 TableAttribute 특성이 없습니다. |
상속 계층 구조를 매핑하려면
루트 클래스에 TableAttribute 특성을 추가합니다.
또한 루트 클래스에 계층 구조의 각 클래스에 대한 InheritanceMappingAttribute 특성을 추가합니다.
각 InheritanceMappingAttribute 특성에 대해 Code 속성을 정의합니다.
이 속성에는 이 데이터 행이 속한 클래스 또는 서브클래스를 나타내기 위해 데이터베이스 테이블의 IsDiscriminator 열에 표시되는 값이 저장됩니다.
또한 각 InheritanceMappingAttribute 특성에 대해 Type 속성을 추가합니다.
이 속성에는 키 값이 의미하는 클래스 또는 서브클래스를 지정하는 값이 저장됩니다.
InheritanceMappingAttribute 특성 중 하나의 특성에만 IsDefault 속성을 추가합니다.
이 속성은 데이터베이스 테이블의 판별자 값이 상속 매핑의 어떠한 Code 값과도 일치하지 않는 경우 대체(fallback) 매핑을 지정하는 데 사용됩니다.
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;
}