Sdílet prostřednictvím


Vnoření datových relací

V relační reprezentaci dat obsahují jednotlivé tabulky řádky, které vzájemně souvisejí pomocí sloupce nebo sady sloupců. V ADO.NET DataSetse relace mezi tabulkami implementuje pomocí .DataRelation Při vytváření relace DataRelation se relace nadřazeného a podřízeného sloupce spravují pouze prostřednictvím relace. Tabulky a sloupce jsou samostatné entity. V hierarchické reprezentaci dat, která XML poskytuje, jsou relace nadřazené-podřízené reprezentovány nadřazenými prvky, které obsahují vnořené podřízené prvky.

Aby bylo možné usnadnit vnoření podřízených objektů při synchronizaci DataSet s XmlDataDocument daty XML nebo zapsána jako data XML pomocí WriteXml, DataRelation zveřejňuje vnořenou vlastnost. Nastavení vnořené vlastnosti DataRelation na true způsobí, že podřízené řádky relace budou vnořené do nadřazeného sloupce při zápisu jako data XML nebo synchronizovány s XmlDataDocument. Vnořená vlastnost DataRelation je ve výchozím nastavení false.

Představte si například následující sadu dat.

' 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"]);  

Vzhledem k tomu, že vnořená vlastnost DataRelation objekt není nastavena na hodnotu true pro tuto dataSet, podřízené objekty nejsou vnořené do nadřazených elementů, pokud je tato DataSet reprezentována jako data XML. Transformace reprezentace XML datové sady , která obsahuje související datové sadys nenořenými relacemi dat, může způsobit nízký výkon. Doporučujeme vnořit vztahy dat. Chcete-li to provést, nastavte vnořenou vlastnost na hodnotu true. Pak napište kód v šabloně stylů XSLT, která používá hierarchické výrazy dotazu XPath shora dolů k vyhledání a transformaci dat.

Následující příklad kódu ukazuje výsledek volání WriteXml v 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>  

Všimněte si, že element Customers a Orders elementy jsou zobrazeny jako prvky na stejné straně. Pokud byste chtěli, aby se elementy Orders zobrazovaly jako podřízené položky příslušných nadřazených prvků, vlastnost Vnořená vlastnost DataRelation by byla nastavena na hodnotu true a přidali byste následující:

customerOrders.Nested = True  
customerOrders.Nested = true;  

Následující kód ukazuje, jak by výsledný výstup vypadal, s elementy Orders vnořenými do příslušných nadřazených prvků.

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

Viz také