Aracılığıyla paylaş


DataRelations İç İçe Geçirme

Verilerin ilişkisel gösteriminde, tek tek tablolar bir sütun veya sütun kümesi kullanılarak birbiriyle ilişkili satırlar içerir. ADO.NET DataSet içinde, tablolar arasındaki ilişki DataRelation kullanılarak uygulanır. DataRelation oluşturduğunuzda, sütunların üst-alt ilişkileri yalnızca ilişki aracılığıyla yönetilir. Tablolar ve sütunlar ayrı varlıklardır. XML'nin sağladığı verilerin hiyerarşik bir yapıyla gösterilmesinde, ebeveyn-çocuk ilişkileri, iç içe alt öğeler içeren ebeveyn öğelerle temsil edilir.

Bir DataSet öğesi XmlDataDocument ile senkronize edildiğinde veya WriteXml kullanılarak XML verileri olarak yazıldığında, DataRelation iç içe alt nesne yerleşimini kolaylaştıran bir Nested özelliği sağlar. Nested özelliğinin bir DataRelation üzerinde true olarak ayarlanması, XML verileri olarak yazıldığında veya bir XmlDataDocument ile eşleştirildiğinde, ilişkinin alt satırlarının ebeveyn sütununda iç içe olmasına neden olur. Nested özelliği DataRelation varsayılan olarak false'tur.

Örneğin, aşağıdaki DataSet'i göz önünde bulundurun.

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

Nesnenin NestedDataRelation özelliği bu true için olarak ayarlanmadığından, bu XML verisi olarak temsil edildiğinde, DataSet alt nesneler üst öğelerin içinde yerleştirilmez. İç içe olmayan veri ilişkileriyle ilgili DataSetiçeren bir öğesinin XML gösteriminin dönüştürülmesi yavaş performansa neden olabilir. Veri ilişkilerini iç içe yerleştirmenizi öneririz. Bunu yapmak için özelliğini Nested olarak ayarlayın. Ardından, verileri bulmak ve dönüştürmek için yukarıdan aşağıya hiyerarşik XPath sorgu ifadelerini kullanan XSLT stil sayfasına kod yazın.

Aşağıdaki kod örneği WriteXml çağrısının DataSet üzerindeki sonucunu gösterir.

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

Customers öğesi ve Orders öğeleri eşdüzey öğeler olarak gösterilmektedir, lütfen dikkat edin. Eğer Orders öğelerinin, ilgili üst öğelerinin alt öğeleri olarak görünmesini istiyorsanız, Nested öğesinin DataRelation özelliği true olarak ayarlanmalıdır ve aşağıdakileri eklemelisiniz:

customerOrders.Nested = True
customerOrders.Nested = true;

Aşağıdaki kod, ilgili üst öğeleri içinde iç içe geçmiş Orders öğeleri ile sonuçta alınacak çıkışın nasıl görüneceğini gösterir.

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

Ayrıca bakınız