Partager via


Mappage des relations implicites existant entre des éléments imbriqués d'un schéma

Un schéma en langage XSD (XML Schema Definition) peut présenter des types complexes imbriqués les uns dans les autres. Dans ce cas, le processus de mappage applique le mappage par défaut et crée les différents éléments suivants dans le DataSet :

  • Une table pour chacun des types complexes (parent et enfant).
  • Si aucune contrainte unique n'est définie pour le parent, chaque définition de table comprend une colonne clé primaire supplémentaire nommée sur le modèle NomTable_Id, où NomTable est le nom de la table parente.
  • Une contrainte de clé primaire sur la table parente, identifiant la colonne supplémentaire en tant que clé primaire (via l'assignation de la valeur True à la propriété IsPrimaryKey). La contrainte est nommée selon le modèle Constraint*#*, où # est 1, 2, 3, etc. Par exemple, le nom par défaut de la première contrainte est Constraint1.
  • Une contrainte de clé étrangère sur la table enfant, qui identifie la colonne supplémentaire en tant que clé étrangère faisant référence à la clé primaire de la table parente. La contrainte est nommée sur le modèle TableParente_TableEnfant, où TableParente est le nom de la table parente et TableEnfant celui de la table enfant.
  • Une relation de données entre les tables parente et enfant.

L'exemple suivant représente un schéma où OrderDetail est un élément enfant de Order.

<xs:schema id="MyDataSet"  
            xmlns:xs="http://www.w3.org/2001/XMLSchema" 
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

 <xs:element name="MyDataSet" msdata:IsDataSet="true">
   <xs:complexType>
     <xs:choice maxOccurs="unbounded">
       <xs:element name="Order">
         <xs:complexType>
          <xs:sequence>
            <xs:element name="OrderNumber" type="xs:string" />
            <xs:element name="EmpNumber" type="xs:string" />
            <xs:element name="OrderDetail">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="OrderNo" type="xs:string" />
                  <xs:element name="ItemNo" type="xs:string" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
         </xs:complexType>
       </xs:element>
     </xs:choice>
   </xs:complexType>
  </xs:element>
</xs:schema>

Le processus de mappage du schéma XSD crée les éléments suivants dans le **DataSet **:

  • Les tables Order et OrderDetail.

    Order(OrderNumber, EmpNumber, Order_Id)
    OrderDetail(OrderNo, ItemNo, Order_Id)
    
  • Une contrainte unique sur la table Order. Notez que la propriété IsPrimaryKey a la valeur True.

    ConstraintName: Constraint1
    Type: UniqueConstraint
    Table: Order
    Columns: Order_Id 
    IsPrimaryKey: True
    
  • Une contrainte de clé étrangère sur la table OrderDetail.

    ConstraintName: Order_OrderDetail
    Type: ForeignKeyConstraint
    Table: OrderDetail
    Columns: Order_Id 
    RelatedTable: Order
    RelatedColumns: Order_Id 
    
  • Une relation entre les tables Order et OrderDetail. La propriété Nested de cette relation a la valeur True, car les éléments Order et OrderDetail sont imbriqués dans le schéma.

    ParentTable: Order
    ParentColumns: Order_Id 
    ChildTable: OrderDetail
    ChildColumns: Order_Id 
    ParentKeyConstraint: Constraint1
    ChildKeyConstraint: Order_OrderDetail
    RelationName: Order_OrderDetail
    Nested: True
    

Voir aussi

Génération des relations d'un DataSet à partir de XSD | Mappage de contraintes XSD à des contraintes de DataSet | Prise en charge des types de données entre des types XSD et des types .NET Framework