Condividi tramite


Mappare i vincoli dei Key XML Schema (XSD) ai vincoli del DataSet

In uno schema è possibile specificare un vincolo di chiave per un elemento o un attributo usando l'elemento chiave . 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 attributi msdata che è possibile specificare nell'elemento chiave .

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 proprietà del vincolo IsPrimaryKey è impostata su true, rendendola quindi una chiave primaria. La proprietà della colonna AllowDBNull è 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 proprietà della colonna AllowDBNull impostata su false per ogni colonna del vincolo. La proprietà IsPrimaryKey del vincolo univoco è impostata anche su false , a meno che non sia stato specificato msdata:PrimaryKey="true" nell'elemento chiave . È identico a un vincolo univoco nello schema in cui PrimaryKey="true".

Nell'esempio di schema seguente, l'elemento chiave specifica il vincolo di chiave per l'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 chiave specifica che i valori dell'elemento figlio CustomerID 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 mapping di XML Schema crea anche un UniqueConstraint nella colonna CustomerID, come illustrato di seguito nel 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  

Nel DataSet generato, la proprietà IsPrimaryKey di UniqueConstraint è impostata su true perché lo schema specifica msdata:PrimaryKey="true" nell'elemento chiave .

Il valore della proprietà ConstraintName di UniqueConstraint in DataSet è il valore dell'attributo msdata:ConstraintName specificato nell'elemento chiave nello schema.

Vedere anche