Compartilhar via


Mapear restrições de esquema XML (XSD) keyref para restrições de DataSet

O keyref elemento permite estabelecer vínculos entre elementos em 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 keyref elemento também gera uma relação, com as propriedades ParentTable, ChildTable, ParentColumn e ChildColumn especificadas na relação.

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

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

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

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

<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 (linguagem de definição de esquema XML) 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 Order tabela.

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • Uma relação entre as tabelas Order e OrderDetail. A Nested propriedade é 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