Oggetti DataRelation nidificati

In una rappresentazione relazionale dei dati, nelle tabelle individuali sono contenute righe correlate tra loro tramite una colonna o un insieme di colonne. Nel DataSet di ADO.NET la relazione tra le tabelle viene implementata mediante DataRelation. Quando si crea un DataRelation, le relazioni padre-figlio tra le colonne vengono gestite solo tramite tale relazione. Le tabelle e le colonne sono entità separate. Nella rappresentazione gerarchica dei dati fornita dall'XML, le relazioni padre-figlio sono rappresentate da elementi padre contenenti elementi figlio nidificati. Per facilitare la nidificazione di oggetti figlio durante la sincronizzazione di un DataSet con un XmlDataDocument o la scrittura di un DataSey come XML mediante WriteXml, una proprietà Nested viene esposta da DataRelation. L'impostazione della proprietà Nested di un DataRelation su true provoca la nidificazione delle righe figlie all'interno della colonna padre durante la scrittura come dati XML o la sincronizzazione con un XmlDataDocument. L'impostazione predefinita per la proprietà Nested di DataRelation è false. Si consideri ad esempio il seguente DataSet:

Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;" & _
                                            "Integrated Security=SSPI;Initial Catalog=Northwind;")
Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", nwindConn)
Dim orderDA As SqlDataAdapter = New SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate FROM Orders", nwindConn)

nwindConn.Open()

Dim custDS As DataSet = New DataSet("CustomerOrders")
custDA.Fill(custDS, "Customers")
orderDA.Fill(custDS, "Orders")

nwindConn.Close()

Dim custOrderRel As DataRelation = custDS.Relations.Add("CustOrders",
                     custDS.Tables("Customers").Columns("CustomerID"),
                     custDS.Tables("Orders").Columns("CustomerID"))
[C#]
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;" +
                                            "Integrated Security=SSPI;Initial Catalog=Northwind;");
SqlDataAdapter custDA = new SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", nwindConn);
SqlDataAdapter orderDA = new SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate FROM Orders", nwindConn);

nwindConn.Open();

DataSet custDS = new DataSet("CustomerOrders");
custDA.Fill(custDS, "Customers");
orderDA.Fill(custDS, "Orders");

nwindConn.Close();

DataRelation custOrderRel = custDS.Relations.Add("CustOrders",
                     custDS.Tables["Customers"].Columns["CustomerID"],
                     custDS.Tables["Orders"].Columns["CustomerID"]);

Poiché la proprietà Nested dell'oggetto DataRelation non è impostata su true per questo DataSet, gli oggetti figli non verranno nidificati all'interno degli elementi padre quando tale DataSet viene rappresentato sotto forma di dati XML.

Nell'esempio di codice seguente viene illustrato l'output risultante dalla chiamata di WriteXml nel 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 l'elemento Customers e gli elementi Orders vengono mostrati come elementi di pari livello. Per visualizzare gli elementi Orders come figli dei rispettivi elementi padre, è necessario impostare la proprietà Nested dell'oggetto DataRelation su true e aggiungere il seguente codice:

custOrderRel.Nested = True
[C#]
custOrderRel.Nested = true;

Nel codice seguente viene mostrato l'output risultante, con gli elementi Orders nidificati all'interno dei rispettivi elementi padre.

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

XML e il DataSet | Aggiunta di una relazione tra tabelle | Creazione e utilizzo di DataSet