Udostępnij za pośrednictwem


Mapowanie ograniczeń keyref schematu XML (XSD) na ograniczenia elementu DataSet

Element keyref umożliwia ustanawianie łączy między elementami w dokumencie. Jest to podobne do relacji klucza obcego w relacyjnej bazie danych. Jeśli schemat określa element keyref , element jest konwertowany podczas procesu mapowania schematu na odpowiednie ograniczenie klucza obcego w kolumnach w tabelach DataSet. Domyślnie element keyref generuje również relację z właściwościami ParentTable, ChildTable, ParentColumn i ChildColumn określonymi w relacji.

W poniższej tabeli przedstawiono atrybuty msdata , które można określić w elemecie keyref .

Attribute name opis
msdata:ConstraintOnly Jeśli parametr ConstraintOnly="true" zostanie określony w elemecie keyref w schemacie, zostanie utworzone ograniczenie, ale nie zostanie utworzona żadna relacja. Jeśli ten atrybut nie zostanie określony (lub jest ustawiony na Wartość Fałsz), zarówno ograniczenie, jak i relację są tworzone w zestawie danych.
msdata:ConstraintName Jeśli określono atrybut ConstraintName, jego wartość jest używana jako nazwa ograniczenia. W przeciwnym razie atrybut name elementu keyref w schemacie zawiera nazwę ograniczenia w zestawie danych.
msdata:UpdateRule Jeśli atrybut UpdateRule jest określony w elemecie keyref w schemacie, jego wartość jest przypisywana do właściwości ograniczenia UpdateRule w zestawie danych. W przeciwnym razie właściwość UpdateRule jest ustawiona na Cascade.
msdata:DeleteRule Jeśli atrybut DeleteRule jest określony w elemecie keyref w schemacie, jego wartość jest przypisywana do właściwości ograniczenia DeleteRule w zestawie danych. W przeciwnym razie właściwość DeleteRule jest ustawiona na Wartość Kaskadowa.
msdata:AcceptRejectRule Jeśli atrybut AcceptRejectRule jest określony w elemecie keyref w schemacie, jego wartość jest przypisywana do właściwości ograniczenia AcceptRejectRule w zestawie danych. W przeciwnym razie właściwość AcceptRejectRule jest ustawiona na Wartość Brak.

Poniższy przykład zawiera schemat określający relacje klucza i kluczaref między elementem podrzędnym OrderNumber elementu Order i elementem podrzędnym OrderNo elementu OrderDetail .

W przykładzie element podrzędny OrderNumber elementu OrderDetail odwołuje się do elementu podrzędnego OrderNo elementu podrzędnego elementu 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>  

Proces mapowania schematu języka xml (XSD) tworzy następujący zestaw danych z dwiema tabelami:

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

Ponadto zestaw danych definiuje następujące ograniczenia:

  • Unikatowe ograniczenie w tabeli Order .

              Table: Order  
    Columns: OrderNumber
    ConstraintName: OrderNumberKey  
    Type: UniqueConstraint  
    IsPrimaryKey: False  
    
  • Relacja między tabelami Order i OrderDetail . Właściwość Zagnieżdżona ma wartość False , ponieważ dwa elementy nie są zagnieżdżone w schemacie.

              ParentTable: Order  
    ParentColumns: OrderNumber
    ChildTable: OrderDetail  
    ChildColumns: OrderNo
    ParentKeyConstraint: OrderNumberKey  
    ChildKeyConstraint: OrderNoRef  
    RelationName: OrderNoRef  
    Nested: False  
    
  • Ograniczenie klucza obcego w tabeli OrderDetail .

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

Zobacz też