Mapping keyref XML Schema (XSD) Constraints to DataSet Constraints

The keyref element allows you to establish links between elements within a document. This is similar to a foreign key relationship in a relational database. If a schema specifies the keyref element, during the schema mapping process the element is converted to a corresponding foreign key constraint on the columns in the tables of the DataSet. By default, the keyref element also generates a relation, with the ParentTable, ChildTable, ParentColumn, and ChildColumn properties specified on the relation.

The following table outlines the msdata attributes you can specify in the keyref element.

Attribute name Description
msdata:ConstraintOnly If ConstraintOnly="true" is specified on the keyref element in the schema, a constraint is created but no relation is created. If this attribute is not specified (or is set to False), both the constraint and the relation are created in the DataSet.
msdata:ConstraintName If the ConstraintName attribute is specified, its value is used as the name of the constraint. Otherwise, the name attribute of the keyref element in the schema provides the constraint name in the DataSet.
msdata:UpdateRule If the UpdateRule attribute is specified in the keyref element in the schema, its value is assigned to the UpdateRule constraint property in the DataSet. Otherwise the UpdateRule property is set to Cascade.
msdata:DeleteRule If the DeleteRule attribute is specified in the keyref element in the schema, its value is assigned to the DeleteRule constraint property in the DataSet. Otherwise the DeleteRule property is set to Cascade.
msdata:AcceptRejectRule If the AcceptRejectRule attribute is specified in the keyref element in the schema, its value is assigned to the AcceptRejectRule constraint property in the DataSet. Otherwise the AcceptRejectRule property is set to None.

The following example contains a schema that specifies the key and keyref relationships between the OrderNumber child element of the Order element and the OrderNo child element of the OrderDetail element.

In the example, the OrderNumber child element of the OrderDetail element refers to the OrderNo key child element of the Order element.

<xs:schema id="MyDataSet"  
            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>

The XML Schema definition language (XSD) schema mapping process produces the following DataSet with two tables:

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

In addition, the DataSet defines the following constraints:

  • A unique constraint on the Order table.

    Table: Order
    Columns: OrderNumber 
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • A relationship between the Order and OrderDetail tables. The Nested property is set to False because the two elements are not nested in the schema.

    ParentTable: Order
    ParentColumns: OrderNumber 
    ChildTable: OrderDetail
    ChildColumns: OrderNo 
    ParentKeyConstraint: OrderNumberKey
    ChildKeyConstraint: OrderNoRef
    RelationName: OrderNoRef
    Nested: False
    
  • A foreign key constraint on the OrderDetail table.

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

See Also

Mapping XML Schema (XSD) Constraints to DataSet Constraints | Generating DataSet Relations from XML Schema (XSD) | Data Type Support between XML Schema (XSD) Types and .NET Framework Types