Сопоставьте ограничения XML-схемы (XSD) с ограничениями набора данных.

Элемент keyref позволяет устанавливать связи между элементами в документе. Это похоже на связь внешнего ключа в реляционной базе данных. Если схема указывает на элемент keyref, элемент преобразуется во время процесса сопоставления схем в соответствующее ограничение внешнего ключа для столбцов в таблицах DataSet. По умолчанию элемент keyref также создает отношение с ParentTable, ChildTable, ParentColumn и ChildColumn свойствами, указанными в отношении.

В следующей таблице описаны msdata атрибуты, которые можно указать в элементе keyref .

Имя атрибута Описание
msdata:ConstraintOnly Если в схеме задано ConstraintOnly="true" на элементе keyref, создается ограничение, но связь не создается. Если этот атрибут не указан (или имеет значение False), ограничение и отношение создаются в Наборе данных.
msdata:ConstraintName ConstraintName Если атрибут указан, его значение используется в качестве имени ограничения. name В противном случае атрибут элемента keyref в схеме предоставляет имя ограничения в Наборе данных.
msdata:UpdateRule UpdateRule Если атрибут указан в keyref элементе схемы, его значение назначается UpdateRule свойству ограничения в DataSet. UpdateRule В противном случае свойство имеет значение Cascade.
msdata:DeleteRule DeleteRule Если атрибут указан в keyref элементе схемы, его значение назначается DeleteRule свойству ограничения в DataSet. DeleteRule В противном случае свойство имеет значение Cascade.
msdata:AcceptRejectRule AcceptRejectRule Если атрибут указан в keyref элементе схемы, его значение назначается AcceptRejectRule свойству ограничения в DataSet. AcceptRejectRule В противном случае свойство имеет значение None.

В следующем примере содержится схема, указывающая отношения между дочерним элементом key элемента keyref и дочерним элементом OrderNumber элемента Order.

В примере дочерний элемент OrderNumber элемента OrderDetail ссылается на ключевой дочерний элемент OrderNo элемента 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>

Процесс сопоставления схем XML Schema (XSD) создает следующие DataSet с двумя таблицами:

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

Кроме того, определяет DataSet следующие ограничения:

  • Уникальное ограничение таблицы Order .

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • Связь между таблицами Order и OrderDetail. Свойству Nested присвоено значение False, так как два элемента не вложены в схему.

              ParentTable: Order
    ParentColumns: OrderNumber
    ChildTable: OrderDetail
    ChildColumns: OrderNo
    ParentKeyConstraint: OrderNumberKey
    ChildKeyConstraint: OrderNoRef
    RelationName: OrderNoRef
    Nested: False
    
  • Ограничение внешнего ключа таблицы OrderDetail .

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

См. также