데이터의 관계형 표현에서 개별 테이블에는 열 또는 열 집합을 사용하여 서로 관련된 행이 포함됩니다. ADO.NET DataSet테이블 간의 관계는 을 사용하여 DataRelation구현됩니다. DataRelation을 만들 때 열의 부모-자식 관계는 관계를 통해서만 관리됩니다. 테이블과 열은 별도의 개체입니다. XML에서 제공하는 데이터의 계층적 표현에서 부모-자식 관계는 중첩된 자식 요소를 포함하는 부모 요소로 표시됩니다.
DataSet
DataSet가 XmlDataDocument와 동기화되거나 WriteXml을(를) 사용하여 XML 데이터로 작성되는 경우, 자식 개체의 중첩을 용이하게 하기 위해 NestedDataRelation이(가) 노출합니다.
Nested XML 데이터로 작성되거나 DataRelation와 동기화될 때 관계의 자식 행이 부모 열 내에 중첩되도록 하려면 true 속성을 설정합니다.
Nested 속성의 DataRelation는 기본적으로 false입니다.
예를 들어 다음 DataSet을 고려합니다.
' Assumes connection is a valid SqlConnection.
Dim customerAdapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT CustomerID, CompanyName FROM Customers", connection)
Dim orderAdapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT OrderID, CustomerID, OrderDate FROM Orders", connection)
connection.Open()
Dim dataSet As DataSet = New DataSet("CustomerOrders")
customerAdapter.Fill(dataSet, "Customers")
orderAdapter.Fill(dataSet, "Orders")
connection.Close()
Dim customerOrders As DataRelation = dataSet.Relations.Add( _
"CustOrders", dataSet.Tables("Customers").Columns("CustomerID"), _
dataSet.Tables("Orders").Columns("CustomerID"))
// Assumes connection is a valid SqlConnection.
SqlDataAdapter customerAdapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName FROM Customers", connection);
SqlDataAdapter orderAdapter = new SqlDataAdapter(
"SELECT OrderID, CustomerID, OrderDate FROM Orders", connection);
connection.Open();
DataSet dataSet = new DataSet("CustomerOrders");
customerAdapter.Fill(dataSet, "Customers");
orderAdapter.Fill(dataSet, "Orders");
connection.Close();
DataRelation customerOrders = dataSet.Relations.Add(
"CustOrders", dataSet.Tables["Customers"].Columns["CustomerID"],
dataSet.Tables["Orders"].Columns["CustomerID"]);
Nested 속성이 이 DataSet에 대해 true으로(로) 설정되지 않았으므로 XML 데이터로 표현될 때 DataSet의 자식 개체는 부모 요소 내에 중첩되지 않습니다. 중첩되지 않은 데이터 관계를 사용하여 관련 DataSet이 포함된 XML 표현 을 변환하면 성능이 저하될 수 있습니다. 데이터 관계를 중첩하는 것이 좋습니다. 이렇게 하려면 속성을 Nested로 설정합니다. 그런 다음, 하향식 계층적 XPath 쿼리 식을 사용하여 데이터를 찾고 변환하는 코드를 XSLT 스타일시트에 작성합니다.
다음 코드 예제에서는 WriteXml에서 호출 한 결과를 보여 줍니다.
<CustomerOrders>
<Customers>
<CustomerID>ALFKI</CustomerID>
<CompanyName>Alfreds Futterkiste</CompanyName>
</Customers>
<Customers>
<CustomerID>ANATR</CustomerID>
<CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
</Customers>
<Orders>
<OrderID>10643</OrderID>
<CustomerID>ALFKI</CustomerID>
<OrderDate>1997-08-25T00:00:00</OrderDate>
</Orders>
<Orders>
<OrderID>10692</OrderID>
<CustomerID>ALFKI</CustomerID>
<OrderDate>1997-10-03T00:00:00</OrderDate>
</Orders>
<Orders>
<OrderID>10308</OrderID>
<CustomerID>ANATR</CustomerID>
<OrderDate>1996-09-18T00:00:00</OrderDate>
</Orders>
</CustomerOrders>
Customers 요소와 Orders 요소는 형제 요소로 표시됩니다. 해당 요소들이 부모 요소 Orders의 자식으로 표시되도록 하려면 Nested 속성을 DataRelation로 설정해야 하며 다음을 추가합니다.
customerOrders.Nested = True
customerOrders.Nested = true;
다음 코드는 Orders 요소가 각각의 부모 요소 내에 중첩되어 있는 결과 출력을 보여줍니다.
<CustomerOrders>
<Customers>
<CustomerID>ALFKI</CustomerID>
<Orders>
<OrderID>10643</OrderID>
<CustomerID>ALFKI</CustomerID>
<OrderDate>1997-08-25T00:00:00</OrderDate>
</Orders>
<Orders>
<OrderID>10692</OrderID>
<CustomerID>ALFKI</CustomerID>
<OrderDate>1997-10-03T00:00:00</OrderDate>
</Orders>
<CompanyName>Alfreds Futterkiste</CompanyName>
</Customers>
<Customers>
<CustomerID>ANATR</CustomerID>
<Orders>
<OrderID>10308</OrderID>
<CustomerID>ANATR</CustomerID>
<OrderDate>1996-09-18T00:00:00</OrderDate>
</Orders>
<CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
</Customers>
</CustomerOrders>