Вложение отношений DataRelationNesting DataRelations

В реляционном представлении данных отдельные таблицы содержат строки, которые связаны друг с другом при помощи столбца или набора столбцов.In a relational representation of data, individual tables contain rows that are related to one another using a column or set of columns. В ADO.NET DataSet связь между таблицами реализуется при помощи DataRelation.In the ADO.NET DataSet, the relationship between tables is implemented using a DataRelation. При создании DataRelationотношения типа «родители-потомки» для столбцов управляются только через это отношение.When you create a DataRelation, the parent-child relationships of the columns are managed only through the relation. Таблицы и столбцы являются отдельными сущностями.The tables and columns are separate entities. В иерархическом представлении данных, которое делает возможным XML, связи вида «родитель-потомок» представлены родительскими элементами, которые содержат вложенные дочерние элементы.In the hierarchical representation of data that XML provides, the parent-child relationships are represented by parent elements that contain nested child elements.

Для упрощения вложенности дочерних объектов при синхронизации набора данных с XmlDataDocument или записи в виде XML-данных с помощью метода WriteXmlобъект DataRelation предоставляет вложенное свойство.To facilitate the nesting of child objects when a DataSet is synchronized with an XmlDataDocument or written as XML data using WriteXml, the DataRelation exposes a Nested property. Присвоение свойству Nested объекта DataRelation значения true приводит к тому, что дочерние строки связи будут вложены в родительский столбец при записи в виде XML-данных или синхронизированы с объектом XmlDataDocument.Setting the Nested property of a DataRelation to true causes the child rows of the relation to be nested within the parent column when written as XML data or synchronized with an XmlDataDocument. Свойство Nested объекта DataRelation по умолчанию имеет значение false.The Nested property of the DataRelation is false, by default.

Например, рассмотрим следующий набор данных.For example, consider the following 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 объекта DataRelation не имеет значение true для этого набора данных, дочерние объекты не вложены в родительские элементы, если этот набор данных представлен в виде XML-данных.Because the Nested property of the DataRelation object is not set to true for this DataSet, the child objects are not nested within the parent elements when this DataSet is represented as XML data. Преобразование XML-представления набора данных , содержащего связанные наборыданных с невложенными связями данных, может привести к снижению производительности.Transforming the XML representation of a DataSet that contains related DataSets with non-nested data relations can cause slow performance. Рекомендуется вкладывать связи данных.We recommend that you nest the data relations. Для этого присвойте свойству Nested значение true.To do this, set the Nested property to true. Затем в таблице стилей XSLT напишите код, в котором для поиска и преобразования данных используются иерархические нисходящие выражения запросов XPath.Then write code in the XSLT style sheet that uses top-down hierarchical XPath query expressions to locate and transform the data.

В следующем примере кода показан результат вызова метода WriteXml для набора данных.The following code example shows the result from calling WriteXml on the DataSet.

<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 отображаются как родственные элементы.Note that the Customers element and the Orders elements are shown as sibling elements. Если нужно, чтобы элементы Orders отображались как дочерние элементы соответствующих родительских элементов, необходимо установить для вложенного свойства DataRelation значение true , а также добавить следующее:If you wanted the Orders elements to show up as children of their respective parent elements, the Nested property of the DataRelation would need to be set to true and you would add the following:

customerOrders.Nested = True  
customerOrders.Nested = true;  

В следующем коде показано, как будут выглядеть итоговые выходные данные, с элементами Orders , вложенными в соответствующие им родительские элементы.The following code shows what the resulting output would look like, with the Orders elements nested within their respective parent elements.

<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>  

См. такжеSee also