Поделиться через


Формирование связей DataSet на основе схемы XML (XSD)

В DataSet взаимосвязь между двумя или несколькими столбцами формируется путем создания отношения «родитель-потомок». Существует три способа представить связь элементов DataSet внутри схемы XSD.

  • Задайте вложенные сложные типы.

  • Используйте заметку msdata:Relationship.

  • Задайте xs:keyref без заметки msdata:ConstraintOnly.

Вложенные сложные типы

Определения вложенных сложных типов в схеме указывают на связь элементов по модели «родитель-потомок». В следующем фрагменте схемы XML показано, что элемент OrderDetail является дочерним по отношению к элементу Order.

<xs:element name="Order">
  <xs:complexType>
     <xs:sequence>        
       <xs:element name="OrderDetail" />
           <xs:complexType>             
           </xs:complexType>
     </xs:sequence>
  </xs:complexType>
</xs:element>

Процесс сопоставления схем XML создает таблицы в наборе данных DataSet, соответствующие вложенным сложным типам в схеме. Он также создает дополнительные столбцы, которые используются как столбцы типа «родитель-потомок» в созданных таблицах. Обратите внимание, что эти столбцы «родитель-потомок» задают связи, которые отличаются от ограничений первичного/внешнего ключа.

Заметка msdata:Relationship

Заметка msdata:Relationship позволяет явно задать связь «родитель-потомок» между невложенными элементами схемы. В следующем примере показана структура элемента Relationship.

<msdata:Relationship name="CustOrderRelationship"  
      msdata:parent=""  
      msdata:child=""  
      msdata:parentkey=""  
      msdata:childkey="" />

Атрибуты заметки msdata:Relationship определяют элементы связи «родитель-потомок», элементы parentkey и childkey, а также атрибуты этой связи. Процесс сопоставления использует эти данные для создания таблиц в DataSet и связи «первичный/внешний ключ» между этими таблицами.

Например, следующий фрагмент схемы задает одноуровневые (не вложенные) элементы Order и OrderDetail. В схеме содержится заметка msdata:Relationship, которая указывает связь «родитель-потомок» между этими элементами. В этом случае необходимо явно задать связь с помощью заметки msdata:Relationship.

 <xs:element name="MyDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
        <xs:element name="OrderDetail">
          <xs:complexType>
            
          </xs:complexType>
       </xs:element>
       <xs:element name="Order">
          <xs:complexType>
            
          </xs:complexType>
       </xs:element>
    </xs:choice>
  </xs:complexType>
</xs:element>
   <xs:annotation>
     <xs:appinfo>
       <msdata:Relationship name="OrdOrdDetailRelation"
          msdata:parent="Order"
          msdata:child="OrderDetail" 
          msdata:parentkey="OrderNumber"
          msdata:childkey="OrderNo"/>
     </xs:appinfo>
  </xs:annotation>
 

Процесс сопоставления использует элемент Relationship для создания связи «родитель-потомок» между столбцом OrderNumber в таблице Order и столбцом OrderNo в таблице OrderDetail в DataSet. Процесс сопоставления только указывает связь, он не задает автоматически ограничения значений в этих столбцах подобно ограничениям первичного/внешнего ключа в реляционных базах данных.

В этом разделе

См. также