Condividi tramite


Generazione delle relazioni del DataSet da XML Schema (XSD)

In un tipo DataSet è possibile stabilire un'associazione tra due o più colonne creando una relazione padre-figlio. Una relazione DataSet può essere rappresentata all'interno di uno schema XSD (XML Schema Definition Language) in tre modi diversi:

  • Specificare tipi complessi annidati.

  • Utilizzare l'annotazione msdata:Relationship.

  • Specificare un xs:keyref senza l'annotazione msdata:ConstraintOnly.

Tipi complessi annidati

Le definizioni di tipi complessi annidati in uno schema indicano le relazioni padre-figlio degli elementi. Nel seguente frammento di XML Schema viene mostrato che OrderDetail è un elemento figlio dell'elemento Order.

<xs:element name="Order">
  <xs:complexType>
     <xs:sequence>        
       <xs:element name="OrderDetail" />
           <xs:complexType>             
           </xs:complexType>
     </xs:sequence>
  </xs:complexType>
</xs:element>

Il processo di mapping di XML Schema consente di creare nel DataSet tabelle corrispondenti ai tipi complessi annidati dello schema e di creare colonne aggiuntive, utilizzate come colonne padre-figlio per le tabelle generate. Notare che tali colonne padre-figlio consentono di specificare relazioni, il che non equivale a specificare vincoli di chiave primaria/chiave esterna.

Annotazione msdata:Relationship

L'annotazione msdata:Relationship consente di specificare esplicitamente relazioni padre-figlio tra gli elementi non annidati di uno schema. Nell'esempio seguente viene mostrata la struttura dell'elemento Relationship.

<msdata:Relationship name="CustOrderRelationship"  
      msdata:parent=""  
      msdata:child=""  
      msdata:parentkey=""  
      msdata:childkey="" />

Gli attributi dell'annotazione msdata:Relationship consentono di identificare gli elementi coinvolti in una relazione padre-figlio, oltre agli elementi parentkey e childkey e gli attributi coinvolti nella relazione. Queste informazioni vengono utilizzate dal processo di mapping per generare tabelle nel DataSet e creare relazioni di chiave primaria/chiave esterna tra tali tabelle.

Ad esempio, il seguente frammento di schema specifica gli elementi Order e OrderDetail allo stesso livello (non annidati). Lo schema specifica un'annotazione msdata:Relationship, che a sua volta specifica la relazione padre-figlio tra i due elementi. In questo caso è necessario specificare una relazione esplicita mediante l'annotazione msdata:Relationship.

 <xs:element name="MyDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
        <xs:element name="OrderDetail">
          <xs:complexType>
            
          </xs:complexType>
       </xs:element>
       <xs:element name="Order">
          <xs:complexType>
            
          </xs:complexType>
       </xs:element>
    </xs:choice>
  </xs:complexType>
</xs:element>
   <xs:annotation>
     <xs:appinfo>
       <msdata:Relationship name="OrdOrdDetailRelation"
          msdata:parent="Order"
          msdata:child="OrderDetail" 
          msdata:parentkey="OrderNumber"
          msdata:childkey="OrderNo"/>
     </xs:appinfo>
  </xs:annotation>
 

L'elemento Relationship viene utilizzato dal processo di mapping per creare una relazione padre-figlio tra la colonna OrderNumber della tabella Order e la colonna OrderNo della tabella OrderDetail nel DataSet. Il processo di mapping consente solo di specificare la relazione. Non specifica automaticamente alcun vincolo sui valori di tali colonne, a differenza di quanto avviene mediante i vincoli di chiave primaria/chiave esterna nei database relazionali.

In questa sezione

Sezioni correlate