Mapowanie ograniczeń key schematu XML (XSD) na ograniczenia elementu DataSet
W schemacie można określić ograniczenie klucza dla elementu lub atrybutu przy użyciu elementu klucza . 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 atrybuty msdata, które można określić w kluczu elementu.
Attribute name | opis |
---|---|
msdata:ConstraintName | Jeśli ten atrybut zostanie określony, jego wartość jest używana jako nazwa ograniczenia. W przeciwnym razie atrybut name udostępnia wartość nazwy ograniczenia. |
msdata:PrimaryKey | Jeśli PrimaryKey="true" jest obecny, właściwość ograniczenia IsPrimaryKey jest ustawiona na wartość true, co powoduje, że jest to klucz podstawowy. Właściwość kolumny AllowDBNull jest ustawiona na wartość 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 wartość false dla każdej kolumny w ograniczeniu. Właściwość IsPrimaryKey unikatowego ograniczenia jest również ustawiona na wartość false , chyba że określono msdata:PrimaryKey="true"
element klucza . Jest to identyczne z unikatowym ograniczeniem w schemacie, w którym PrimaryKey="true"
.
W poniższym przykładzie schematu element klucza określa ograniczenie klucza w elemecie 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>
Kluczowy element określa, że wartości elementu podrzędnego CustomerID elementu Customers 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 powoduje również utworzenie wartości 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 zestawie danych właściwość IsPrimaryKey obiektu UniqueConstraint jest ustawiona na wartość true, ponieważ schemat określa msdata:PrimaryKey="true"
element klucza.
Wartość właściwości ConstraintName właściwości UniqueConstraint w zestawie danych jest wartością atrybutu msdata:ConstraintName określonego w elemecie key w schemacie.