Udostępnij przez


Przypisz ograniczenia keyref schematu XML (XSD) do ograniczeń zestawu danych

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, jest on konwertowany w trakcie mapowania schematu na odpowiadające ograniczenie klucza obcego dla kolumn w tabelach DataSet. Domyślnie element keyref generuje również relację, w której określono tabele ParentTable, ChildTable oraz właściwość ParentColumn, wraz z innymi właściwościami ChildColumn używanymi w tej relacji.

W poniższej tabeli przedstawiono atrybuty, które można określić w elemencie msdatakeyref.

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

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

W przykładzie element podrzędny OrderNumber elementu OrderDetail odnosi się do głównego elementu podrzędnego OrderNo 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 XML Schema Definition Language (XSD) produkuje następujący element DataSet z dwiema tabelami.

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

Ponadto definiuje DataSet następujące ograniczenia:

  • Unikatowe ograniczenie w Order tabeli.

              Table: Order
    Columns: OrderNumber
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • Relacja między tabelami Order i OrderDetail . Właściwość Nested jest ustawiona na 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 także