Condividi tramite


Mappare i vincoli di XML Schema (XSD) keyref ai vincoli del DataSet

L'elemento keyref consente di stabilire collegamenti tra gli elementi all'interno di un documento. Questo elemento ha quindi una funzione simile a quella della relazione di chiave esterna in un database relazionale. Se in uno schema viene specificato l'elemento keyref, durante il processo di mapping dello schema l'elemento viene convertito in un vincolo di chiave esterna corrispondente per le colonne delle tabelle del tipo DataSet. Per impostazione predefinita, una relazione viene generata anche dall'elemento keyref e le proprietà ParentTable, ChildTable, ParentColumn e ChildColumn vengono specificate per tale relazione.

Nella tabella seguente vengono brevemente descritti gli attributi msdata che è possibile specificare per l'elemento keyref.

Nome attributo

Descrizione

msdata:ConstraintOnly

Se ConstraintOnly="true" è specificato nell'elemento keyref dello schema, verrà creato un vincolo ma non verrà creata alcuna relazione. Se questo attributo non viene specificato (o è impostato su False), nel DataSet vengono creati sia il vincolo che la relazione.

msdata:ConstraintName

Se l'attributo ConstraintName è specificato, il relativo valore viene utilizzato come nome del vincolo. In caso contrario, il nome del vincolo nel DataSet viene fornito dall'attributo name dell'elemento keyref dello schema.

msdata:UpdateRule

Se l'attributo UpdateRule viene specificato nell'elemento keyref dello schema, il relativo valore viene assegnato alla proprietà di vincolo UpdateRule nel DataSet. In caso contrario, la proprietà UpdateRule viene impostata su Cascade.

msdata:DeleteRule

Se l'attributo DeleteRule viene specificato nell'elemento keyref dello schema, il relativo valore viene assegnato alla proprietà di vincolo DeleteRule nel DataSet. In caso contrario, la proprietà DeleteRule viene impostata su Cascade.

msdata:AcceptRejectRule

Se l'attributo AcceptRejectRule viene specificato nell'elemento keyref dello schema, il relativo valore viene assegnato alla proprietà di vincolo AcceptRejectRule nel DataSet. In caso contrario, la proprietà AcceptRejectRule viene impostata su None.

Nell'esempio seguente viene riportato uno schema in cui vengono specificate le relazioni key e keyref tra l'elemento figlio OrderNumber dell'elemento Order e l'elemento figlio OrderNo dell'elemento OrderDetail.

Nell'esempio, l'elemento figlio OrderNumber dell'elemento OrderDetail fa riferimento all'elemento chiave figlio OrderNo dell'elemento Order.

<xs:schema id="MyDataSet"  
            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>

Il processo di mapping dello schema XSD (XML Schema Definition Language) consente di generare il seguente DataSet con due tabelle:

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

Nell'oggetto DataSet vengono inoltre definiti i seguenti vincoli:

  • Un vincolo univoco nella tabella Order.

    Table: Order
    Columns: OrderNumber 
    ConstraintName: OrderNumberKey
    Type: UniqueConstraint
    IsPrimaryKey: False
    
  • Una relazione tra le tabelle Order e OrderDetail. La proprietà Nested viene impostata su False, poiché i due elementi non sono annidate nello schema.

    ParentTable: Order
    ParentColumns: OrderNumber 
    ChildTable: OrderDetail
    ChildColumns: OrderNo 
    ParentKeyConstraint: OrderNumberKey
    ChildKeyConstraint: OrderNoRef
    RelationName: OrderNoRef
    Nested: False
    
  • Un vincolo di chiave esterna nella tabella OrderDetail.

    ConstraintName: OrderNoRef
    Type: ForeignKeyConstraint
    Table: OrderDetail
    Columns: OrderNo 
    RelatedTable: Order
    RelatedColumns: OrderNumber 
    

Vedere anche

Concetti

Generazione delle relazioni del DataSet da XML Schema (XSD)

Altre risorse

Mapping dei vincoli di XML Schema (XSD) ai vincoli del DataSet