我有一个应用程序,我有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
将被插入到唯一的一个子程序中,而不是在第二个子程序中创建。
如何在导入时识别特定调整的父子程序。?
那么我该如何解决这个问题。??
答案 0 :(得分:0)
我认为这是一项设计决定 - 根据您的业务需求可能会有所不同,但一般情况下应如下所示:
如果您对所有级别(程序,子程序,调整)都有规则(没有重复描述),那么您应首先检查程序是否重复(通过将描述与现有数据进行比较),如果是,则获取ID从数据库中并将其放在映射字典中
var ProgramIdMapping = new Dictionary<int,int>();
ProgramIdMapping.Add(ImportedDataId, DatabaseId);
现在对子程序和调优记录重复此操作,当您开始将它们插入数据库时,您可以从映射字典中找到父数据库Id
var DbProgramId = ProgramIdMapping[subProgram.ProgramId];