Partager via


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

Rubriques connexes