Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么ReadXmlSchema会创建额外的;ID";柱_C#_Xml_Xsd_Dataset - Fatal编程技术网

C# 为什么ReadXmlSchema会创建额外的;ID";柱

C# 为什么ReadXmlSchema会创建额外的;ID";柱,c#,xml,xsd,dataset,C#,Xml,Xsd,Dataset,给定一个XSD文件,下面的代码会在返回的数据集中的两个数据表中生成一个额外的(不需要的)列 ds.ReadXmlSchema(s); 两个数据表都有一个Order_Id列;其他列与XSD完全匹配 以前有人见过这个吗 XSD文件如下: <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-mic

给定一个XSD文件,下面的代码会在返回的数据集中的两个数据表中生成一个额外的(不需要的)列

ds.ReadXmlSchema(s);
两个数据表都有一个Order_Id列;其他列与XSD完全匹配

以前有人见过这个吗

XSD文件如下:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Order">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Item" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType msdata:AutoIncrement="false">
            <xs:attribute name="itemId" type="xs:unsignedInt" />
            <xs:attribute name="stockCode" type="xs:string" />
            <xs:attribute name="stockCodeType" type="xs:string" />
            <xs:attribute name="Quantity" type="xs:unsignedLong" />
            <xs:attribute name="ProductIdX" type="xs:unsignedInt" />
            <xs:attribute name="legalEntity" type="xs:string" />
            <xs:attribute name="countryOfIssue" type="xs:string" />
            <xs:attribute name="branchSystem" type="xs:string" />
            <xs:attribute name="accountId" type="xs:string" />
            <xs:attribute name="settlementDate" type="xs:string" />
            <xs:attribute name="tradeDate" type="xs:string" />
            <xs:attribute name="partyCode" type="xs:string" />
            <xs:attribute name="userId" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="OrderId" type="xs:unsignedInt" />
      <xs:attribute name="StrategyId" type="xs:string" />
      <xs:attribute name="ActivityId" type="xs:string" />
    </xs:complexType>
  </xs:element>
</xs:schema>

您应该看看。本文指出,

通常,对于架构元素的每个complexType子元素,一个 在数据集中生成表。确定了表的结构 根据复杂类型的定义

但是,仅为顶级complexType元素创建表 当complexType元素嵌套在另一个complexType中时 元素,在这种情况下,嵌套的complexType元素映射到 数据集中的DataTable

所以基本上在本例中,
ReadXML(…)
将创建两个表

  • 命令
  • 项目
  • 由于Item complexType嵌套在Order complexType
    中,因此也将生成这两个表之间的关系。为了能够创建此关系,将包含一个新的列顺序id

    编辑

    再看一看。在本文中,您将发现:

    msdata:Relationship注释允许您显式指定 架构中未定义的元素之间的父子关系 嵌套的。下面的示例显示了关系的结构 元素

    
    ... 你的定义在这里!
    

    因此,您可以修改用于引用内部到外部complexType的列,但是无法阻止此功能

    谢谢大家!!这是有帮助的,但有没有办法绕过这一点?i、 例如,为了避免在生成的数据集中自动添加此Order_Id列?添加了有关如何修改已创建关系的更多信息卓越信息(+1)。我可以想到的一个改进是,让它更清楚地表明,问题实际上是从层次模型转移到实体关系模型:嵌套实体之间的隐式关系现在必须得到明确的关注。另一个有趣的事实是,如果XML包含示例中项的
    嵌套复杂类型中的任何列
    ,那么XML将包含大量冗余数据,并且还需要一个key/keyref来确保XSD发现值之间的不一致。
    
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
      <xs:element name="Order">
         ... your definition goes here!
     </xs:element>
     <xs:annotation>
       <xs:appinfo>
         <msdata:Relationship name="OrderItemRelation"
          msdata:parent="Order"
          msdata:child="Item" 
          msdata:parentkey="OrderID"
          msdata:childkey="ANY_COLUMN_IN_NESTED_COMPLEX_TYPE"/>
       </xs:appinfo>
      </xs:annotation>
    </xs:schema>