2010-05-11 4 views
1

У меня есть xsd-файл, который описывает схему DataSet, которую я использую для чтения/записи моего DataSet на диск в виде XML-файла. Я не писал схему из руки, скорее, я написал файл xml вручную, вывел схему из xml-файла и затем выписал схему xsd. (Я довольно новый для этого ...)Проблема с схемой DataSet, интерпретируемой из xsd

Во всяком случае здесь схема (некоторые amazon.com вещи происходит здесь):

<?xml version="1.0" standalone="yes"?> 
<xs:schema id="Items" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="Items" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
<xs:complexType> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
    <xs:element name="Item"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="ASIN" type="xs:string" /> 
      <xs:element name="Title" type="xs:string" /> 
      <xs:element name="Offer" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="MerchantName" type="xs:string" /> 
       <xs:element name="Price" type="xs:string" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:choice> 
</xs:complexType> 
</xs:element> 
</xs:schema> 

Когда DataSet читает схему, он создает две таблицы, связанную с помощью специального ключа, который он создает, называется Item_Id, который является уникальным для каждого элемента и отображает предложение. Поэтому я получаю таблицу Item с столбцами (ASIN, Title, Item_Id) и таблицу предложений со столбцами (MerchantName, Price, Item_Id).

Проблема заключается в том, что ASIN уже является уникальным идентификатором для элемента, поэтому процесс импорта схемы ввел некоторую избыточность и делает код более неудобным, чем он должен быть. Как я могу изменить эту схему, чтобы в итоге оказались 2 таблицы (ASIN, Title) и (ASIN, MerchantName, Price)?

Спасибо!

+0

Там нет такого понятия, как C# .NET. Только C#. –

ответ

2

Схема XSD автоматически создает случайный Item_Id для единицы идентификации, если вы не объявили первичный ключ.

Отсутствует первичный ключ в вашей схеме xsd.

<xs:unique name="Constraint1" msdata:PrimaryKey="true"> 
     <xs:selector xpath=".//Item" />    
     <xs:field xpath="ASIN"/> 
</xs:unique> 

Таким образом, не будет никакого ITEM_ID в наборе данных и ваша схема должна выглядеть следующим образом:

<?xml version="1.0" standalone="yes"?> 
    <xs:schema id="Items" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="Items" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="Item"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="ASIN" type="xs:string" /> 
       <xs:element name="Title" type="xs:string" /> 
       <xs:element name="Offer" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="MerchantName" type="xs:string" /> 
        <xs:element name="Price" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
       <xs:unique name="Constraint1" msdata:PrimaryKey="true"> 
        <xs:selector xpath=".//Item" />    
        <xs:field xpath="ASIN"/> 
       </xs:unique> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    <xs:unique name="Constraint2" msdata:PrimaryKey="true"> 
     <xs:selector xpath=".//Item" /> 
     <xs:field xpath="ASIN" /> 
    </xs:unique> 
    </xs:element> 
</xs:schema> 
+0

Спасибо, Мира! Я был на пути туда, но просто не имел этого ... – Rich

Смежные вопросы