Generazione delle relazioni del DataSet da uno schema XML (XSD)
In un DataSet è possibile stabilire un'associazione tra due o più colonne creando una relazione padre-figlio. Sono disponibili tre modalità di rappresentazione di una relazione DataSet all'interno di uno schema XSD (XML Schema Definition Language):
- Specificare tipi complessi nidificati.
- Utilizzare l'annotazione msdata:Relationship.
- Specificare un xs:keyref senza l'annotazione msdata:ConstraintOnly.
Tipi complessi nidificati
Le definizioni di tipi complessi nidificati in uno schema indicano le relazioni padre-figlio degli elementi. Nel seguente frammento di schema XML 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 dello schema XML consente di creare nel DataSet tabelle corrispondenti ai tipi complessi nidificati dello schema e di creare colonne aggiuntive, utilizzate come colonne padre-figlio per le tabelle generate. Si noti che tali colonne padre-figlio consentono di specificare relazioni, che non corrispondono a vincoli di chiave primaria/chiave esterna.
Annotazione msdata:Relationship
L'annotazione msdata:Relationship consente di specificare esplicitamente le relazioni padre-figlio tra gli elementi non nidificati 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.
Nel seguente frammento di schema ad esempio vengono specificati gli elementi Order e OrderDetail allo stesso livello (non nidificati). Nello schema viene specificata un'annotazione msdata:Relationship, che consente di specificare 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 viene infatti specificato automaticamente alcun vincolo sui valori di tali colonne, a differenza di quanto avviene mediante i vincoli di chiave primaria/chiave esterna nei database relazionali. È possibile utilizzare elementi dello schema XML per specificare i vincoli in un DataSet, come descritto in Supporto dei tipi di dati tra i tipi dello schema XML (XSD) e i tipi di .NET Framework.
In questa sezione
- Mapping di relazioni implicite tra elementi nidificati dello schema
Vengono descritti i vincoli e le relazioni creati implicitamente in un DataSet quando nello schema XML sono presenti elementi nidificati. - Mapping di relazioni specificate per elementi nidificati
Viene descritto come impostare esplicitamente le relazioni in un DataSet per gli elementi dello schema XML. - Definizione delle relazioni tra elementi non nidificati
Viene descritta la creazione di relazioni in un DataSet tra elementi non nidificati dello schema XML.
Sezioni correlate
- Generazione della struttura relazionale di un DataSet dallo schema XML (XSD)
Viene descritta la struttura relazionale, o schema, di un DataSet creato da uno schema XSD di XML. - Mapping dei vincoli dello schema XML (XSD) ai vincoli del DataSet
Vengono descritti gli elementi dello schema XML utilizzati per creare vincoli univoci e di chiave esterna in un DataSet. - Supporto del tipo di dati tra i tipi XSD (XML Schema) e i tipi .NET Framework
Viene descritta la rappresentazione dei tipi dello schema XML come tipi di .NET Framework per le colonne di un DataSet.