Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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