Bagikan melalui


Menyarangkan DataRelations

Dalam representasi data relasional, tabel individual berisi baris yang terkait satu sama lain menggunakan kolom atau kumpulan kolom. Dalam ADO.NET DataSet, hubungan antara tabel diimplementasikan menggunakan DataRelation. Saat Anda membuat DataRelation, hubungan induk-turunan kolom hanya dikelola melalui relasi. Tabel dan kolom adalah entitas terpisah. Dalam representasi hierarkis data yang disediakan XML, hubungan induk-turunan diwakili oleh elemen induk yang berisi elemen turunan berlapis.

Untuk memfasilitasi bersarangnya objek anak saat DataSet disinkronkan dengan XmlDataDocument atau ditulis sebagai data XML menggunakan WriteXml, DataRelation mengekspos properti Nested. Mengatur properti Nested dari DataRelationtrue menyebabkan baris anak dari relasi disarangkan ke dalam kolom induk ketika ditulis sebagai data XML atau disinkronkan dengan XmlDataDocument. Properti Nested dari DataRelation adalah false, secara default.

Misalnya, pertimbangkan Himpunan Data berikut.

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

Karena properti Nested dari objek DataRelation tidak diatur menjadi true untuk DataSet ini, objek turunan tidak dimasukkan dalam elemen induk ketika DataSet direpresentasikan sebagai data XML. Mengubah representasi XML yang berisi DataSet Data terkait dengan hubungan data yang tidak berlapis dapat menyebabkan performa lambat. Kami menyarankan agar Anda menumpuk hubungan data. Untuk melakukan ini, atur properti ke Nestedtrue. Kemudian tulis kode dalam lembar gaya XSLT yang menggunakan ekspresi kueri XPath hierarkis atas bawah untuk menemukan dan mengubah data.

Contoh kode berikut menunjukkan hasil dari pemanggilan WriteXml pada 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>

Perhatikan bahwa Customers elemen dan Orders elemen ditampilkan sebagai elemen saudara. Jika Anda ingin elemen Orders muncul sebagai anak dari elemen induk masing-masing, properti Nested dari DataRelation harus diatur ke true dan Anda akan menambahkan yang berikut:

customerOrders.Nested = True
customerOrders.Nested = true;

Kode berikut menunjukkan bagaimana hasil outputnya akan terlihat, dengan elemen Orders yang disarangkan dalam masing-masing elemen induk.

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

Lihat juga