Megosztás a következőn keresztül:


DataRelations beágyazása

Az adatok relációs ábrázolása esetén az egyes táblák olyan sorokat tartalmaznak, amelyek egy oszlop vagy oszlopkészlet használatával kapcsolódnak egymáshoz. A ADO.NET DataSeta táblák közötti kapcsolat egy DataRelation. DataRelation létrehozásakor az oszlopok szülő-gyermek kapcsolatai csak a reláción keresztül kezelhetők. A táblák és oszlopok különálló entitások. Az XML által biztosított adatok hierarchikus ábrázolása során a szülő-gyermek kapcsolatokat beágyazott gyermekelemeket tartalmazó szülőelemek jelölik.

Annak érdekében, hogy megkönnyítse a gyermekobjektumok beágyazását, amikor egy Adatkészlet szinkronizálva van egy XmlDataDocument XML-adattal a WriteXml használatával, a DataRelation egy beágyazott tulajdonságot tesz elérhetővé. Ha a DataRelation beágyazott tulajdonságát igaz értékre állítja, a kapcsolat gyermeksorai a szülőoszlopba ágyazódnak, amikor XML-adatokként íródnak, vagy xmlDataDocument-fájllal szinkronizálódnak. A DataRelation beágyazott tulajdonsága alapértelmezés szerint hamis.

Vegyük például a következő Adatkészletet.

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

Mivel a DataRelation objektum Beágyazott tulajdonsága nem igaz erre az Adatkészletre vonatkozóan, a gyermekobjektumok nem lesznek beágyazva a szülőelemekbe, ha ez az Adatkészlet XML-adatként van ábrázolva. Ha nem beágyazott adatkapcsolatokkal rendelkező kapcsolódó adathalmazokattartalmazó adathalmaz XML-reprezentációját átalakítja, az lassú teljesítményt okozhat. Javasoljuk, hogy ágyazzuk be az adatkapcsolatokat. Ehhez állítsa a Beágyazott tulajdonság értékét igaz értékre. Ezután írjon kódot az XSLT stíluslapra, amely felülről lefelé hierarchikus XPath-lekérdezési kifejezéseket használ az adatok megkereséséhez és átalakításához.

Az alábbi példakód a WriteXml adathalmazon való meghívásának eredményét mutatja be.

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

Vegye figyelembe, hogy a Vevők és a Rendelések elem testvérelemként jelenik meg. Ha azt szeretné, hogy a Rendelések elemek a szülőelemeik gyermekeiként jelenjenek meg, a DataRelation beágyazott tulajdonságát igaz értékre kell állítani, és a következőt kell hozzáadnia:

customerOrders.Nested = True  
customerOrders.Nested = true;  

Az alábbi kód bemutatja, hogyan nézne ki az eredmény, ha az Orders elemek a szülőelemeikbe ágyazva lennének.

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

Lásd még