Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Элемент 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