目前有这样的一个XML的schema,说白了就是一个完整的数据库,请问我该怎么样才能对其进行操作(删除,添加,复制,修改)
因为里面有ForgienKey,所以在删除时,得把关联的所有的键值删除,而复制的话,又要把主键的值和被复制的不一样,就是把整个结构数据复制下来,但是所有的PrimaryKey的值要相应的改变,请问该怎么去实现?具体的XML文件请看附件
<?xml version="1.0" standalone="yes"?>
<IdBuilderDataSet xmlns="http://tempuri.org/IdBuilderDataSet.xsd">
<xs:schema id="IdBuilderDataSet" targetNamespace="http://tempuri.org/IdBuilderDataSet.xsd" xmlns:mstns="http://tempuri.org/IdBuilderDataSet.xsd" xmlns="http://tempuri.org/IdBuilderDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="IdBuilderDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Settings">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="Value" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CodeDefinitions">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Codes">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="Index" type="xs:int" minOccurs="0" />
<xs:element name="IsTemplate" type="xs:boolean" minOccurs="0" />
<xs:element name="CodeDefinitionIdentifier" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CodeParts">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Index" type="xs:int" minOccurs="0" />
<xs:element name="Value" type="xs:string" minOccurs="0" />
<xs:element name="Type" type="xs:int" minOccurs="0" />
<xs:element name="MinSize" type="xs:int" minOccurs="0" />
<xs:element name="CodeIdentifier" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Counters">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Ref" type="xs:int" minOccurs="0" />
<xs:element name="Type" type="xs:int" minOccurs="0" />
<xs:element name="Quantity" type="xs:int" minOccurs="0" />
<xs:element name="Source" type="xs:string" minOccurs="0" />
<xs:element name="SourceArgument" type="xs:string" minOccurs="0" />
<xs:element name="CodeDefinitionIdentifier" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="PK_Settings" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Settings" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:unique name="PK_CodeDefinitions" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:CodeDefinitions" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:unique name="PK_Codes" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Codes" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:unique name="PK_CodeParts" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:CodeParts" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:unique name="PK_Counters" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Counters" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:keyref name="Rel_CodeDefinition_Counters" refer="PK_CodeDefinitions">
<xs:selector xpath=".//mstns:Counters" />
<xs:field xpath="mstns:CodeDefinitionIdentifier" />
</xs:keyref>
<xs:keyref name="Rel_Code_CodeParts" refer="PK_Codes">
<xs:selector xpath=".//mstns:CodeParts" />
<xs:field xpath="mstns:CodeIdentifier" />
</xs:keyref>
<xs:keyref name="Rel_CodeDefinition_Codes" refer="PK_CodeDefinitions">
<xs:selector xpath=".//mstns:Codes" />
<xs:field xpath="mstns:CodeDefinitionIdentifier" />
</xs:keyref>
</xs:element>
</xs:schema>
因为里面有ForgienKey,所以在删除时,得把关联的所有的键值删除,而复制的话,又要把主键的值和被复制的不一样,就是把整个结构数据复制下来,但是所有的PrimaryKey的值要相应的改变,请问该怎么去实现?具体的XML文件请看附件
<?xml version="1.0" standalone="yes"?>
<IdBuilderDataSet xmlns="http://tempuri.org/IdBuilderDataSet.xsd">
<xs:schema id="IdBuilderDataSet" targetNamespace="http://tempuri.org/IdBuilderDataSet.xsd" xmlns:mstns="http://tempuri.org/IdBuilderDataSet.xsd" xmlns="http://tempuri.org/IdBuilderDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="IdBuilderDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Settings">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="Value" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CodeDefinitions">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Codes">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="Index" type="xs:int" minOccurs="0" />
<xs:element name="IsTemplate" type="xs:boolean" minOccurs="0" />
<xs:element name="CodeDefinitionIdentifier" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CodeParts">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Index" type="xs:int" minOccurs="0" />
<xs:element name="Value" type="xs:string" minOccurs="0" />
<xs:element name="Type" type="xs:int" minOccurs="0" />
<xs:element name="MinSize" type="xs:int" minOccurs="0" />
<xs:element name="CodeIdentifier" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Counters">
<xs:complexType>
<xs:sequence>
<xs:element name="Identifier" type="xs:string" />
<xs:element name="Ref" type="xs:int" minOccurs="0" />
<xs:element name="Type" type="xs:int" minOccurs="0" />
<xs:element name="Quantity" type="xs:int" minOccurs="0" />
<xs:element name="Source" type="xs:string" minOccurs="0" />
<xs:element name="SourceArgument" type="xs:string" minOccurs="0" />
<xs:element name="CodeDefinitionIdentifier" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="PK_Settings" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Settings" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:unique name="PK_CodeDefinitions" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:CodeDefinitions" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:unique name="PK_Codes" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Codes" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:unique name="PK_CodeParts" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:CodeParts" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:unique name="PK_Counters" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:Counters" />
<xs:field xpath="mstns:Identifier" />
</xs:unique>
<xs:keyref name="Rel_CodeDefinition_Counters" refer="PK_CodeDefinitions">
<xs:selector xpath=".//mstns:Counters" />
<xs:field xpath="mstns:CodeDefinitionIdentifier" />
</xs:keyref>
<xs:keyref name="Rel_Code_CodeParts" refer="PK_Codes">
<xs:selector xpath=".//mstns:CodeParts" />
<xs:field xpath="mstns:CodeIdentifier" />
</xs:keyref>
<xs:keyref name="Rel_CodeDefinition_Codes" refer="PK_CodeDefinitions">
<xs:selector xpath=".//mstns:Codes" />
<xs:field xpath="mstns:CodeDefinitionIdentifier" />
</xs:keyref>
</xs:element>
</xs:schema>
set.EnforceConstraints = true; //确保遵循约束规则,true是默认的
set.ReadXml(@"C:\04104834348.xml", XmlReadMode.ReadSchema); //假设你要删除CodeParts表的一个主键值为f438db69-788f-4cc7-9b68-841cebf033ec的一行
DataTable codeParts = set.Tables["CodeParts"];
DataRow row = codeParts.Rows.Find("f438db69-788f-4cc7-9b68-841cebf033ec");
if (row != null)
{
row.Delete();
set.AcceptChanges();
}
//其他的你需要的数据操作.....
//最后把DataSet再写为XML文件,覆盖原来的文件就可以了
set.WriteXml(@"C:\04104834348.xml", XmlWriteMode.WriteSchema);