导出文件中存在重复条目的问题

时间:2013-07-06 09:54:46

标签: c# winforms import export

我有一个应用程序,我有3个表,结构如下:

1) Program
   --------
   Program_ID
   Description

2) SubProgram
   ----------
   SubProgram_ID
   Program_ID
   Description 

3) Tuning
   --------
   Tuning_ID
   SubProgram_ID
   Program_ID
   Description

实施例。表值:

程序:

Program_ID   Description
------------------------
1            ABCD

子程序

SubProgram_ID    Program_ID   Description
-----------------------------------------
1                1            EFGH
2                1            IJKL       // Here is the problem
3                1            IJKL       // Here is the problem

调整

Tuning_ID  SubProgram_ID  Program_ID Description
--------------------------------------------------
1          1              1          MNOP
2          2              1          QRST
3          1              1          UVWX

现在我有一个模块,我可以将该记录导出到XML文件中,任何人都可以在其主键可能不同的软件中再次导入该文件。

导出的XML如下所示:

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<Program>
   <Program_ID>123</Program_ID>
   <Description>ABCD</Description>
</Program>
<SubProgramList>
<SubProgram>
   <SubProgram_ID>1195</SubProgram_ID>
   <Descr>EFGH</Descr>
</SubProgram>
<SubProgram>
   <SubProgram_ID>1195</SubProgram_ID>
   <Descr>IJKL</Descr>
</SubProgram>
<SubProgram>
   <SubProgram_ID>1195</SubProgram_ID>
   <Descr>IJKL</Descr>
</SubProgram>
<SubProgramList>

<TuningList>
<Tunings>
   <Program_ID>True</Program_ID>
   <SubProgram_ID>0</SubProgram_ID>
   <Description>MNOP</Description>
</Tunings>
<Tunings>
   <Program_ID>True</Program_ID>
   <SubProgram_ID>0</SubProgram_ID>
   <Description>QRST</Description>
</Tunings>
<Tunings>
   <Program_ID>True</Program_ID>
   <SubProgram_ID>0</SubProgram_ID>
   <Description>UVWX</Description>
</Tunings>
</TuningList>
</DocumentElement>

所以我的问题是:
我根据描述插入记录,所以当SubProgram具有相同的描述时,该子程序下的Tunings将被插入到唯一的一个子程序中,而不是在第二个子程序中创建。

如何在导入时识别特定调整的父子程序。?

那么我该如何解决这个问题。??

1 个答案:

答案 0 :(得分:0)

我认为这是一项设计决定 - 根据您的业务需求可能会有所不同,但一般情况下应如下所示:

  • 您应该有一个中心点,您可以在其中导入数据以确保不按顺序进行重复检查,否则您将需要一个时间戳字段来根据创建顺序同步数据
  • 您应检查导入的数据,重复说明或重复ID中是否有任何重复记录,并清除这些记录或返回验证例外
  • 如果您对所有级别(程序,子程序,调整)都有规则(没有重复描述),那么您应首先检查程序是否重复(通过将描述与现有数据进行比较),如果是,则获取ID从数据库中并将其放在映射字典中

    var ProgramIdMapping = new Dictionary<int,int>();
    ProgramIdMapping.Add(ImportedDataId, DatabaseId);
    
  • 现在对子程序和调优记录重复此操作,当您开始将它们插入数据库时​​,您可以从映射字典中找到父数据库Id

    var DbProgramId = ProgramIdMapping[subProgram.ProgramId];