Udostępnij przez


Mapuj ograniczenia schematu XML klucza (XSD) na ograniczenia zestawu danych

W schemacie można określić ograniczenie klucza dla elementu lub atrybutu key przy użyciu elementu . Element lub atrybut, na którym określono ograniczenie klucza, musi mieć unikatowe wartości w dowolnym wystąpieniu schematu i nie może mieć wartości null.

Ograniczenie klucza jest podobne do ograniczenia unikatowego, z tą różnicą, że kolumna, w której zdefiniowano ograniczenie klucza, nie może mieć wartości null.

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

Nazwa atrybutu Opis
msdata:ConstraintName Jeśli ten atrybut zostanie określony, jego wartość jest używana jako nazwa ograniczenia. name W przeciwnym razie atrybut udostępnia wartość nazwy ograniczenia.
msdata:PrimaryKey Jeśli PrimaryKey="true" jest obecny, właściwość ograniczenia IsPrimaryKey jest ustawiona na true, co czyni go kluczem głównym. Właściwość kolumny AllowDBNull jest ustawiona na false, ponieważ klucze podstawowe nie mogą mieć wartości null.

Podczas konwertowania schematu, w którym określono ograniczenie klucza, proces mapowania tworzy unikatowe ograniczenie w tabeli z właściwością kolumny AllowDBNull ustawioną na false dla każdej kolumny w ograniczeniu. Właściwość IsPrimaryKey unikatowego ograniczenia jest również ustawiona na false, chyba że określono msdata:PrimaryKey="true" na elemencie key. Jest to identyczne z unikatowym ograniczeniem w schemacie, w którym PrimaryKey="true".

W poniższym przykładzie schematu element key określa ograniczenie klucza na element CustomerID.

<xs:schema id="cod"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Customers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="CustomerID" type="xs:string" minOccurs="0" />
        <xs:element name="CompanyName" type="xs:string" minOccurs="0" />
       <xs:element name="Phone" type="xs:string" />
     </xs:sequence>
   </xs:complexType>
 </xs:element>
<xs:element name="MyDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="Customers" />
    </xs:choice>
  </xs:complexType>
   <xs:key  msdata:PrimaryKey="true"
       msdata:ConstraintName="KeyCustID"
          name="KeyConstCustomerID" >
     <xs:selector xpath=".//Customers" />
     <xs:field xpath="CustomerID" />
    </xs:key>
 </xs:element>
</xs:schema>

Element key określa, że wartości CustomerID elementu podrzędnego Customers elementu muszą mieć unikatowe wartości i nie mogą mieć wartości null. Podczas tłumaczenia schematu języka definicji schematu XML (XSD) proces mapowania tworzy następującą tabelę:

Customers(CustomerID, CompanyName, Phone)

Mapowanie schematu XML tworzy również element UniqueConstraint w kolumnie CustomerID , jak pokazano poniżej DataSet. (Dla uproszczenia wyświetlane są tylko odpowiednie właściwości).

      DataSetName: MyDataSet
TableName: customers
  ColumnName: CustomerID
      AllowDBNull: False
      Unique: True
  ConstraintName: KeyCustID
      Table: customers
      Columns: CustomerID
      IsPrimaryKey: True

W generowanym DataSet właściwość IsPrimaryKey obiektu UniqueConstraint jest ustawiona na true , ponieważ schemat określa msdata:PrimaryKey="true" w elemencie key.

Wartość właściwości ConstraintName w obiekcie UniqueConstraint jest wartością atrybutu msdata:ConstraintName, określonego w elemencie key w schemacie.

Zobacz także