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 elemento keyref 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, durante el proceso de asignación del esquema el elemento se convertirá en una restricción de clave externa correspondiente en las columnas de las tablas del DataSet. De forma predeterminada, el elemento keyref 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 atributos msdata que puede especificar en el elemento keyref .
Nombre del atributo | Descripción |
---|---|
msdata:ConstraintOnly | Si ConstraintOnly="true" se especifica en el elemento keyref del 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 atributo ConstraintName , su valor se usa como nombre de la restricción. De lo contrario, el atributo name del elemento keyref del esquema proporciona el nombre de restricción en dataSet. |
msdata:UpdateRule | Si el atributo UpdateRule se especifica en el elemento keyref del esquema, su valor se asigna a la propiedad de restricción UpdateRule en dataSet. De lo contrario, la propiedad UpdateRule se establece en Cascade. |
msdata:DeleteRule | Si el atributo DeleteRule se especifica en el elemento keyref del esquema, su valor se asigna a la propiedad de restricción DeleteRule en dataSet. De lo contrario, la propiedad DeleteRule se establece en Cascade. |
msdata:AcceptRejectRule | Si el atributo AcceptRejectRule se especifica en el elemento keyref del esquema, su valor se asigna a la propiedad de restricción AcceptRejectRule en dataSet. De lo contrario, la propiedad AcceptRejectRule se establece en None. |
El siguiente ejemplo contiene un esquema que especifica las relaciones de clave y clave de referencia entre el elemento hijo OrderNumber del elemento Order y el elemento hijo OrderNo del elemento OrderDetail.
En el ejemplo, el elemento secundario OrderNumber del elemento OrderDetail hace referencia al elemento secundario de clave OrderNo del 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>
El proceso de asignación de esquemas del lenguaje de definición de esquemas XML (XSD) genera el siguiente conjunto de datos con dos tablas:
OrderDetail(OrderNo, ItemNo) and
Order(OrderNumber, EmpNumber)
Además, DataSet define las restricciones siguientes:
Restricción única en la tabla Order .
Table: Order Columns: OrderNumber ConstraintName: OrderNumberKey Type: UniqueConstraint IsPrimaryKey: False
Relación entre las tablas Order y OrderDetail . La propiedad Nested se establece como False porque 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: False
Restricción de clave externa en la tabla OrderDetail .
ConstraintName: OrderNoRef Type: ForeignKeyConstraint Table: OrderDetail Columns: OrderNo RelatedTable: Order RelatedColumns: OrderNumber