Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El keyref elemento permite establecer vínculos entre elementos dentro de un documento. Esto es similar a una relación de clave externa en una base de datos relacional. Si un esquema especifica el elemento keyref, este se convierte durante el proceso de asignación de esquema en una restricción correspondiente de clave externa en las columnas de las tablas de DataSet. De forma predeterminada, el keyref elemento también genera una relación, con las propiedades ParentTable, ChildTable, ParentColumn y ChildColumn especificadas en la relación.
En la tabla siguiente se describen los msdata atributos que puede especificar en el keyref elemento .
| Nombre del atributo | Descripción |
|---|---|
| msdata:ConstraintOnly | Si ConstraintOnly="true" se especifica en el elemento del keyref esquema, se crea una restricción, pero no se crea ninguna relación. Si no se especifica este atributo (o se establece en False), tanto la restricción como la relación se crean en el DataSet. |
| msdata:ConstraintName | Si se especifica el ConstraintName atributo , su valor se usa como nombre de la restricción. De lo contrario, el name atributo del keyref elemento en el esquema proporciona el nombre de restricción en dataSet. |
| msdata:UpdateRule | Si el UpdateRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la UpdateRule propiedad constraint de DataSet. De lo contrario, la UpdateRule propiedad se establece en Cascade. |
| msdata:DeleteRule | Si el DeleteRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la DeleteRule propiedad constraint de DataSet. De lo contrario, la DeleteRule propiedad se establece en Cascade. |
| msdata:AcceptRejectRule | Si el AcceptRejectRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la AcceptRejectRule propiedad constraint de DataSet. De lo contrario, la AcceptRejectRule propiedad se establece en None. |
El ejemplo siguiente contiene un esquema que especifica las key y keyref relaciones entre el elemento hijo OrderNumber del Order y el elemento hijo OrderNo del OrderDetail.
En el ejemplo, el OrderNumber elemento secundario del OrderDetail elemento hace referencia al OrderNo elemento secundario clave del 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>
El proceso de asignación de esquemas del lenguaje de definición de esquemas XML (XSD) genera lo siguiente DataSet con dos tablas:
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
Además, DataSet define las restricciones siguientes:
Restricción única en la
Ordertabla.Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: FalseRelación entre las tablas
OrderyOrderDetail. La propiedadNestedse establece enFalseporque los dos elementos no están anidados en el esquema.ParentTable: Order ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo ParentKeyConstraint: OrderNumberKey ChildKeyConstraint: OrderNoRef RelationName: OrderNoRef Nested: FalseRestricción de clave externa en la tabla
OrderDetail.ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber