Partilhar via


Restrições do esquema XML de keyref (XSD) de mapa para restrições de conjunto de dados

O elemento keyref permite estabelecer links entre elementos dentro de um documento. Isso é semelhante a uma relação de chave estrangeira em um banco de dados relacional. Se um esquema especificar o elemento keyref , o elemento será convertido durante o processo de mapeamento de esquema em uma restrição de chave estrangeira correspondente nas colunas das tabelas do DataSet. Por padrão, o elemento keyref também gera uma relação, com as propriedades ParentTable, ChildTable, ParentColumn e ChildColumn especificadas na relação.

A tabela a seguir descreve os atributos msdata que você pode especificar no elemento keyref .

Attribute name Description
msdata:ConstraintOnly Se ConstraintOnly="true" for especificado no elemento keyref no esquema, uma restrição será criada, mas nenhuma relação será criada. Se esse atributo não for especificado (ou estiver definido como False), a restrição e a relação serão criadas no DataSet.
msdata:ConstraintName Se o atributo ConstraintName for especificado, seu valor será usado como o nome da restrição. Caso contrário, o atributo name do elemento keyref no esquema fornece o nome da restrição no DataSet.
msdata:UpdateRule Se o atributo UpdateRule for especificado no elemento keyref no esquema, seu valor será atribuído à propriedade de restrição UpdateRule no DataSet. Caso contrário, a propriedade UpdateRule será definida como Cascade.
msdata:DeleteRule Se o atributo DeleteRule for especificado no elemento keyref no esquema, seu valor será atribuído à propriedade de restrição DeleteRule no DataSet. Caso contrário, a propriedade DeleteRule será definida como Cascade.
msdata:AcceptRejectRule Se o atributo AcceptRejectRule for especificado no elemento keyref no esquema, seu valor será atribuído à propriedade de restrição AcceptRejectRule no DataSet. Caso contrário, a propriedade AcceptRejectRule será definida como None.

O exemplo a seguir contém um esquema que especifica as relações de chave e keyref entre o elemento filho OrderNumber do elemento Order e o elemento filho OrderNo do elemento OrderDetail .

No exemplo, o elemento filho OrderNumber do elemento OrderDetail refere-se ao elemento filho chave OrderNo do elemento Order .

<xs:schema id="MyDataSet" xmlns=""
            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="OrderDetail">  
       <xs:complexType>  
         <xs:sequence>  
           <xs:element name="OrderNo" type="xs:integer" />  
           <xs:element name="ItemNo" type="xs:string" />  
         </xs:sequence>  
       </xs:complexType>  
      </xs:element>  
      <xs:element name="Order">  
        <xs:complexType>  
          <xs:sequence>  
            <xs:element name="OrderNumber" type="xs:integer" />  
            <xs:element name="EmpNumber" type="xs:integer" />  
          </xs:sequence>  
        </xs:complexType>  
      </xs:element>  
    </xs:choice>  
  </xs:complexType>  
  
  <xs:key name="OrderNumberKey"  >  
    <xs:selector xpath=".//Order" />  
    <xs:field xpath="OrderNumber" />  
  </xs:key>  
  
  <xs:keyref name="OrderNoRef" refer="OrderNumberKey">  
    <xs:selector xpath=".//OrderDetail" />  
    <xs:field xpath="OrderNo" />  
  </xs:keyref>  
 </xs:element>  
</xs:schema>  

O processo de mapeamento de esquema XSD (XML Schema Definition Language) produz o seguinte DataSet com duas tabelas:

OrderDetail(OrderNo, ItemNo) and  
Order(OrderNumber, EmpNumber)  

Além disso, o DataSet define as seguintes restrições:

  • Uma restrição exclusiva na tabela Ordem .

              Table: Order  
    Columns: OrderNumber
    ConstraintName: OrderNumberKey  
    Type: UniqueConstraint  
    IsPrimaryKey: False  
    
  • Uma relação entre as tabelas Order e OrderDetail . A propriedade Nested é definida como False porque os dois elementos não estão aninhados no esquema.

              ParentTable: Order  
    ParentColumns: OrderNumber
    ChildTable: OrderDetail  
    ChildColumns: OrderNo
    ParentKeyConstraint: OrderNumberKey  
    ChildKeyConstraint: OrderNoRef  
    RelationName: OrderNoRef  
    Nested: False  
    
  • Uma restrição de chave estrangeira na tabela OrderDetail .

              ConstraintName: OrderNoRef  
    Type: ForeignKeyConstraint  
    Table: OrderDetail  
    Columns: OrderNo
    RelatedTable: Order  
    RelatedColumns: OrderNumber
    

Consulte também