Delen via


DataRelations nesten

In een relationele weergave van gegevens bevatten afzonderlijke tabellen rijen die aan elkaar zijn gerelateerd met behulp van een kolom of set kolommen. In de ADO.NET DataSetwordt de relatie tussen tabellen geïmplementeerd met behulp van een DataRelation. Wanneer u een DataRelation maakt, worden de bovenliggende en onderliggende relaties van de kolommen alleen beheerd via de relatie. De tabellen en kolommen zijn afzonderlijke entiteiten. In de hiërarchische weergave van gegevens die xml biedt, worden de bovenliggende en onderliggende relaties vertegenwoordigd door bovenliggende elementen die geneste onderliggende elementen bevatten.

Om het nesten van onderliggende objecten mogelijk te maken wanneer een DataSet wordt gesynchroniseerd met een XmlDataDocument of geschreven als XML-gegevens met behulp van WriteXml, wordt in DataRelation een geneste eigenschap weergegeven. Als u de geneste eigenschap van een DataRelation instelt op waar, worden de onderliggende rijen van de relatie genest in de bovenliggende kolom wanneer ze zijn geschreven als XML-gegevens of gesynchroniseerd met een XmlDataDocument. De geneste eigenschap van de DataRelation is standaard onwaar.

Denk bijvoorbeeld aan de volgende 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"]);  

Omdat de geneste eigenschap van het DataRelation-object niet is ingesteld op Waar voor deze DataSet, worden de onderliggende objecten niet genest in de bovenliggende elementen wanneer deze DataSet wordt weergegeven als XML-gegevens. Het transformeren van de XML-weergave van een DataSet die gerelateerde DataSetsmet niet-geneste gegevensrelaties bevat, kan leiden tot trage prestaties. U wordt aangeraden de gegevensrelaties te nesten. Hiervoor stelt u de geneste eigenschap in op waar. Schrijf vervolgens code in het XSLT-opmaakmodel dat gebruikmaakt van hiërarchische XPath-queryexpressies van boven naar beneden om de gegevens te zoeken en te transformeren.

In het volgende codevoorbeeld ziet u het resultaat van het aanroepen van WriteXml op de 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>  

Houd er rekening mee dat het element Klanten en de elementen Orders worden weergegeven als elementen op hetzelfde niveau. Als u wilt dat de orders-elementen worden weergegeven als onderliggende elementen van hun respectieve bovenliggende elementen, moet de geneste eigenschap van de DataRelation worden ingesteld op waar en voegt u het volgende toe:

customerOrders.Nested = True  
customerOrders.Nested = true;  

De volgende code laat zien hoe de resulterende uitvoer eruit zou zien, waarbij de orders-elementen zijn genest binnen hun respectieve bovenliggende elementen.

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

Zie ook