Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In uno schema è possibile specificare un vincolo di chiave per un elemento o un attributo usando l'elemento key . L'elemento o l'attributo in cui è specificato un vincolo di chiave deve avere valori univoci in qualsiasi istanza dello schema e non può avere valori Null.
Il vincolo di chiave è simile al vincolo univoco, ad eccezione del fatto che la colonna in cui è definito un vincolo di chiave non può avere valori Null.
Nella tabella seguente vengono descritti gli msdata attributi che è possibile specificare nell'elemento key .
| Nome dell'attributo | Descrizione |
|---|---|
| msdata:ConstraintName | Se questo attributo viene specificato, il relativo valore viene usato come nome del vincolo. In caso contrario, l'attributo name fornisce il valore del nome del vincolo. |
| msdata:PrimaryKey | Se PrimaryKey="true" è presente, la IsPrimaryKey proprietà del vincolo è impostata su true, rendendola quindi una chiave primaria. La AllowDBNull proprietà column è impostata su false, perché le chiavi primarie non possono avere valori Null. |
Nella conversione dello schema in cui viene specificato un vincolo di chiave, il processo di mapping crea un vincolo univoco nella tabella con la AllowDBNull proprietà column impostata su false per ogni colonna nel vincolo. La IsPrimaryKey proprietà del vincolo univoco è impostata anche su false , a meno che non sia stato specificato msdata:PrimaryKey="true" nell'elemento key . È identico a un vincolo univoco nello schema in cui PrimaryKey="true".
Nell'esempio di schema seguente l'elemento key specifica il vincolo di chiave sull'elemento 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>
L'elemento key specifica che i valori dell'elemento CustomerID figlio dell'elemento Customers devono avere valori univoci e non possono avere valori Null. Nella traduzione dello schema XSD (XML Schema Definition Language), il processo di mapping crea la tabella seguente:
Customers(CustomerID, CompanyName, Phone)
Lo schema di mapping di XML crea anche un UniqueConstraint nella colonna CustomerID, come illustrato nel seguente DataSet. Per semplicità, vengono visualizzate solo le proprietà pertinenti.
DataSetName: MyDataSet
TableName: customers
ColumnName: CustomerID
AllowDBNull: False
Unique: True
ConstraintName: KeyCustID
Table: customers
Columns: CustomerID
IsPrimaryKey: True
Nell'oggetto DataSet generato, la IsPrimaryKey proprietà di UniqueConstraint è impostata su true perché lo schema specifica msdata:PrimaryKey="true" nell'elemento key .
Il valore della ConstraintName proprietà di UniqueConstraint in DataSet è il valore dell'attributo msdata:ConstraintName specificato nell'elemento key nello schema.