테이블로 유추되는 요소에 역시 테이블로 유추되는 자식 요소가 있으면 두 테이블 사이에 DataRelation이 만들어집니다. ParentTableName_Id라는 이름의 새 열이 부모 요소에 대해 만들어진 테이블과 자식 요소에 대해 만들어진 테이블에 모두 추가됩니다. 이 ID 열의 ColumnMapping 속성은 MappingType.Hidden으로 설정됩니다. 이 열은 부모 테이블에 대한 자동 증분 기본 키가 되며 두 테이블 사이의 DataRelation에 사용됩니다. 추가된 ID 열의 데이터 형식은 다른 모든 유추된 열의 데이터 형식인 System.String과는 달리 System.Int32가 됩니다. 부모 및 자식 테이블에 모두 포함된 새 열을 사용하여 DeleteRule = Cascade인 ForeignKeyConstraint도 만들어집니다.
예를 들어, 다음과 같은 XML을 가정해 봅시다.
<DocumentElement>
<Element1>
<ChildElement1 attr1="value1" attr2="value2"/>
<ChildElement2>Text2</ChildElement2>
</Element1>
</DocumentElement>
위 유추 과정에서 Element1 및 ChildElement1이라는 두 개의 테이블이 생성됩니다.
Element1 테이블에는 Element1_Id 및 ChildElement2라는 두 개의 열이 포함됩니다. Element1_Id 열의 ColumnMapping 속성은 MappingType.Hidden으로 설정됩니다. ChildElement2 열의 ColumnMapping 속성은 MappingType.Element로 설정됩니다. Element1_Id 열은 Element1 테이블의 기본 키로 설정됩니다.
ChildElement1 테이블에는 attr1, attr2 및 Element1_Id라는 세 개의 열이 포함됩니다. attr1 및 attr2열의 ColumnMapping 속성은 MappingType.Attribute로 설정됩니다. Element1_Id 열의 ColumnMapping 속성은 MappingType.Hidden으로 설정됩니다.
DataRelation 및 ForeignKeyConstraint는 두 테이블의 Element1_Id 열을 사용하여 만들어집니다.
DataSet: DocumentElement
Table: Element1
Element1_Id |
ChildElement2 |
---|---|
0 |
Text2 |
Table: ChildElement1
attr1 |
attr2 |
Element1_Id |
---|---|---|
value1 |
value2 |
0 |
DataRelation: Element1_ChildElement1
ParentTable: Element1
ParentColumn: Element1_Id
ChildTable: ChildElement1
ChildColumn: Element1_Id
Nested: True
ForeignKeyConstraint: Element1_ChildElement1
Column: Element1_Id
ParentTable: Element1
ChildTable: ChildElement1
DeleteRule: Cascade
AcceptRejectRule: None
참고 항목
개념
XML로부터 DataSet 스키마 정보 로드(ADO.NET)