Annidamento di oggetti DataRelationNesting DataRelations

In una rappresentazione relazionale dei dati, le singole tabelle contengono righe correlate tra loro tramite una colonna o un set di colonne.In a relational representation of data, individual tables contain rows that are related to one another using a column or set of columns. Nel DataSet di ADO.NET la relazione tra le tabelle viene implementata mediante l'oggetto DataRelation.In the ADO.NET DataSet, the relationship between tables is implemented using a DataRelation. Quando si crea un DataRelation, le relazioni padre-figlio tra le colonne vengono gestite solo tramite la relazione.When you create a DataRelation, the parent-child relationships of the columns are managed only through the relation. Le tabelle e le colonne sono entità separate.The tables and columns are separate entities. Nella rappresentazione gerarchica dei dati fornita dall'XML, le relazioni padre-figlio sono rappresentate da elementi padre contenenti elementi figlio annidati.In the hierarchical representation of data that XML provides, the parent-child relationships are represented by parent elements that contain nested child elements.

Per facilitare l'annidamento di oggetti figlio quando un DataSet è sincronizzato con un XmlDataDocument o scritti come dati XML mediante WriteXml, DataRelation espone un Nested proprietà.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. Impostazione di Nested proprietà di un DataRelation a true fa sì che le righe della relazione vengono annidate all'interno della colonna padre durante scritti come dati XML l'elemento figlio o sincronizzazione con un 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. Il Nested proprietà del DataRelation è false, per impostazione predefinita.The Nested property of the DataRelation is false, by default.

Ad esempio, tenere presente quanto segue DataSet.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"]);  

Poiché il Nested proprietà del DataRelation oggetto non è impostato su true per questo DataSet, gli oggetti figlio non sono annidati all'interno degli elementi padre quando questo set di dati è rappresentato come dati 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. Trasformazione della rappresentazione XML di un DataSet contenente correlati DataSetcon relazioni dati non annidate può causare un rallentamento delle prestazioni.Transforming the XML representation of a DataSet that contains related DataSets with non-nested data relations can cause slow performance. È consigliabile annidare le relazioni dati.We recommend that you nest the data relations. A tale scopo, impostare il Nested proprietà true.To do this, set the Nested property to true. quindi scrivere codice nel foglio di stile XSLT che usa espressioni di query XPath gerarchiche basate su un approccio dall'alto verso il basso per individuare e trasformare i dati.Then write code in the XSLT style sheet that uses top-down hierarchical XPath query expressions to locate and transform the data.

Esempio di codice seguente viene illustrato il risultato della chiamata WriteXml sul DataSet.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>  

Si noti che il clienti elemento e ordini gli elementi vengono visualizzati come elementi di pari livello.Note that the Customers element and the Orders elements are shown as sibling elements. Se si desidera utilizzare il ordini elementi vengano visualizzati come elementi figlio dei rispettivi elementi padre, il Nested proprietà del DataRelation dovrà essere impostata su true e aggiungere quanto segue: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;  

Il codice seguente viene mostrato l'output risultante, con la ordini elementi annidati all'interno dei rispettivi elementi padre.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>  

Vedere ancheSee Also

Uso di XML in un set di datiUsing XML in a DataSet
Aggiunta di oggetti DataRelationAdding DataRelations
Oggetti DataSet, DataTable e DataViewDataSets, DataTables, and DataViews
Provider gestiti ADO.NET e Centro per sviluppatori di set di datiADO.NET Managed Providers and DataSet Developer Center