Dela via


Mappa unika XML-schemabegränsningar (XSD) till datauppsättningsbegränsningar

I ett schema för XML-schemadefinitionsspråk (XSD) anger elementet unique unikhetsbegränsningen för ett element eller attribut. När ett XML-schema översätts till ett relationsschema mappas den unika begränsning som anges för ett element eller attribut i XML-schemat till en unik begränsning i DataTable motsvarande DataSet som genereras.

I följande tabell beskrivs de msdata attribut som du kan ange i elementet unique .

Attributnamn Beskrivning
msdata:ConstraintName Om det här attributet anges används dess värde som villkorsnamn. I annat fall name ger attributet värdet för villkorsnamnet.
msdata:PrimaryKey Om PrimaryKey="true" finns i elementet unique skapas en unik begränsning med egenskapen inställd på IsPrimaryKeytrue.

I följande exempel visas ett XML-schema som använder elementet unique för att ange en unikhetsbegränsning.

<xs:schema id="SampleDataSet"
            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:integer"
           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="SampleDataSet" msdata:IsDataSet="true">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="Customers" />
    </xs:choice>
  </xs:complexType>
   <xs:unique     msdata:ConstraintName="UCustID"     name="UniqueCustIDConstr" >       <xs:selector xpath=".//Customers" />       <xs:field xpath="CustomerID" />     </xs:unique>
</xs:element>
</xs:schema>

Elementet unique i schemat anger att värdet för det Customers underordnade elementet måste vara unikt för alla CustomerID element i en dokumentinstans. När du skapar DataSet läser mappningsprocessen det här schemat och genererar följande tabell:

Customers (CustomerID, CompanyName, Phone)

Mappningsprocessen skapar också en unik begränsning för CustomerID kolumnen, som du ser i följande DataSet. (För enkelhetens skull visas endast relevanta egenskaper.)

      DataSetName: MyDataSet
TableName: Customers
  ColumnName: CustomerID
      AllowDBNull: True
      Unique: True
  ConstraintName: UcustID       Type: UniqueConstraint
      Table: Customers
      Columns: CustomerID
      IsPrimaryKey: False

I det DataSet som genereras är egenskapen IsPrimaryKey inställd på False för den unika begränsningen. Egenskapen unique i kolumnen anger att CustomerID kolumnvärdena måste vara unika (men de kan vara en null-referens, som anges av AllowDBNull kolumnens egenskap).

Om du ändrar schemat och anger det valfria msdata:PrimaryKey attributvärdet till Sant skapas den unika begränsningen i tabellen. Kolumnegenskapen AllowDBNull är inställd på IsPrimaryKey och egenskapen för villkoret är inställd på Sant, vilket gör CustomerID kolumnen till en primär nyckelkolumn.

Du kan ange en unik begränsning för en kombination av element eller attribut i XML-schemat. I följande exempel visas hur du anger att en kombination av CustomerID och CompanyName värden måste vara unika för alla Customers i alla instanser genom att lägga till ytterligare ett xs:fältelement i schemat.

      <xs:unique
         msdata:ConstraintName="SomeName"
         name="UniqueCustIDConstr" >
  <xs:selector xpath=".//Customers" />
  <xs:field xpath="CustomerID" />
  <xs:field xpath="CompanyName" />
</xs:unique>

Det här är villkoret som skapas i den resulterande DataSeten.

ConstraintName: SomeName
  Table: Customers
  Columns: CustomerID CompanyName
  IsPrimaryKey: False

Se även