Génération des relations d'un DataSet à partir de XSD
Dans un DataSet, vous créez une association entre deux ou plusieurs colonnes en établissant une relation parent-enfant. Il existe trois possibilités pour représenter une relation de DataSet dans un schéma en langage XSD (XML Schema Definition) :
- spécifier des types complexes imbriqués ;
- utiliser l'annotation msdata:Relationship ;
- spécifier un xs:keyref sans annotation msdata:ConstraintOnly.
Types complexes imbriqués
Les définitions de types complexes imbriqués dans un schéma indiquent les relations parent-enfant des éléments. L'extrait de code XSD suivant montre que OrderDetail est un élément enfant de l'élément Order.
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
... <xs:element name="OrderDetail" /> <xs:complexType>
...
</xs:complexType>
</xs:sequence>
</xs:complexType>
</xs:element>
Le processus de mappage du schéma XSD crée dans le DataSet des tables qui correspondent aux types complexes imbriqués du schéma. Il crée également des colonnes supplémentaires utilisées comme colonnes parent-enfant pour les tables générées. Notez que ces colonnes parent-enfant spécifient des relations, à ne pas confondre avec les contraintes de clé primaire/clé étrangère.
Annotation msdata:Relationship
L'annotation msdata:Relationship vous permet de spécifier explicitement les relations parent-enfant existant entre différents éléments non imbriqués du schéma. L'exemple suivant représente la structure de l'élément Relationship.
<msdata:Relationship name="CustOrderRelationship"
msdata:parent="..."
msdata:child="..."
msdata:parentkey="..."
msdata:childkey="..." />
Les attributs de l'annotation msdata:Relationship identifient les éléments impliqués dans la relation parent-enfant, ainsi que les éléments et attributs de parentkey et childkey impliqués dans la relation. Le processus de mappage exploite ces informations pour générer des tables dans le DataSet et pour créer la relation clé primaire/clé étrangère entre ces différentes tables.
Par exemple, l'extrait de code XSD suivant spécifie que les éléments Order et OrderDetail se situent au même niveau (ne sont pas imbriqués). Le schéma comporte une annotation msdata:Relationship, qui spécifie la relation parent-enfant entre ces deux éléments. Dans ce cas, une relation explicite doit être spécifiée à l'aide de l'annotation 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>
Le processus de mappage utilise l'élément Relationship pour créer une relation parent-enfant entre la colonne OrderNumber de la table Order et la colonne OrderNo de la table OrderDetail du DataSet. Il ne spécifie que la relation ; il ne spécifie pas automatiquement de contraintes sur les valeurs de ces colonnes comme le font des contraintes de clé primaire/clé étrangère dans des bases de données relationnelles. Pour spécifier des contraintes dans un DataSet, vous pouvez utiliser des éléments de schémas XML, comme expliqué dans Prise en charge des types de données entre des types XSD et des types .NET Framework.
Dans cette section
- Mappage des relations implicites existant entre des éléments imbriqués d'un schéma
Décrit les contraintes et relations implicitement créées dans un DataSet lorsque le schéma XML contient des éléments imbriqués. - Mappage des relations spécifiées pour des éléments imbriqués
Explique comment définir explicitement des relations dans un DataSet pour les éléments imbriqués d'un schéma XML. - Spécification de relations entre des éléments qui ne sont pas imbriqués
Explique comment créer des relations dans un DataSet pour les éléments de schémas XML qui ne sont pas imbriqués.
Rubriques connexes
- Génération de la structure relationnelle d'un DataSet à partir de XSD
Décrit la structure relationnelle, ou schéma, d'un DataSet créé à partir d'un schéma en langage XSD (XML Schema Definition). - Mappage de contraintes XSD à des contraintes de DataSet
Décrit les éléments de schémas XML qui servent à créer des contraintes uniques et de clé étrangère dans un DataSet. - Prise en charge des types de données entre des types XSD et des types .NET Framework
Décrit la façon dont les types XSD sont représentés en tant que types .NET Framework pour les colonnes d'un DataSet.