树形数据导入
系统切换,
有树形数据要从旧系统中导入到新系统中。
树形数据字段大概有Id,ParentId,FullId。
建了一个同步中间表OldId,NewId,State,Remark
刚开始准备循环所有旧数据,遍历旧数据的FullId,
判断中间表OldId是否已存在,不存在再判断是否第一级,第一级就直接添加,
不是第一级就再取NewId的ParentId的FullId加上自己的Id生成自己的FullId。
感觉这样很麻烦,而且要多次读存数据库。
向同事小K请教了一下,小K提供了一个思路,
在程序中先把所有记录的NewId生成,保存在内存中一个中间表。
View Code
1 DataTable dtAllId = new DataTable(); 2 dtAllId.Columns.Add("LZNode_Id", typeof(string)); 3 dtAllId.Columns.Add("NewId", typeof(string)); 4 //遍历一次 先把要导入的guid生成对应表存在内存中 5 foreach (DataRow dr in dtAllKJNode.Rows) 6 { 7 DataRow drNew = dtAllId.NewRow(); 8 drNew["LZNode_Id"] = dr["Node_Id"]; 9 drNew["NewId"] = Guid.NewGuid(); 10 dtAllId.Rows.Add(drNew); 11 }
这样向数据插记录时就不用再生成NewId,而是从内存中间表去查询。
生成FullId也不用向数据库去查询。
View Code
1 foreach (DataRow dr in dtLevelTwo.Rows) 2 { 3 #region 数据转换 4 Model.Catalog_KJ modelCatalog_KJ = new global::LZDataExport.Model.Catalog_KJ(); 5 modelCatalog_KJ.Id = CommandFunction.ObjectToStr(dtAllId.Select("LZNode_Id='" + CommandFunction.ObjectToStr(dr["Node_Id"]) + "'")[0]["NewId"]); 6 //节点名称 7 modelCatalog_KJ.Name = CommandFunction.ObjectToStr(dr["Node_Name"]); 8 //节点编码 9 modelCatalog_KJ.Code = CommandFunction.ObjectToStr(dr["Node_Code"]); 10 //ParentId 11 string ParentId = CommandFunction.ObjectToStr(dr["Node_ParentId"]); 12 if (ParentId != "VR0001") 13 { 14 modelCatalog_KJ.ParentId = CommandFunction.ObjectToStr(dtAllId.Select("LZNode_Id='" + ParentId + "'")[0]["NewId"]); 15 } 16 //IsPublished 17 modelCatalog_KJ.IsPublished = true; 18 //FullId 19 string FullId = ""; 20 string Node_AllParentId = CommandFunction.ObjectToStr(dr["Node_AllParentId"]); 21 string[] Node_AllParentIds = Node_AllParentId.Split(','); 22 //从上自下循环 Node_Id 第一个VR0001不循环 生成这边的FullId 以[.]分开 23 for (int i = 1; i < Node_AllParentIds.Length; i++) 24 { 25 string Node_Id = Node_AllParentIds[i]; 26 FullId += CommandFunction.ObjectToStr(dtAllId.Select("LZNode_Id='" + Node_Id + "'")[0]["NewId"]) + "."; 27 } 28 FullId = FullId.TrimEnd('.'); 29 modelCatalog_KJ.FullId = FullId; 30 //NodeTypeId 31 modelCatalog_KJ.NodeTypeId = NodeTypeId;//CommandFunction.KJ_LevelTwo;//"7d45704e-31fe-4787-a440-b798a56b032a"; 32 #endregion 33 string IsSuccess = DALCatalog_KJ.Add(modelCatalog_KJ, CommandFunction.ObjectToStr(dr["Node_Id"]), Node_AllParentId); 34 LogTxt.AppendText("导入科技"+CatalogName+",理正记录ID[" + CommandFunction.ObjectToStr(dr["Node_Id"]) + "],平台记录ID[" + modelCatalog_KJ.Id + "]," + IsSuccess + "\r"); 35 }
posted on 2012-07-24 16:59 thegavincheng 阅读(350) 评论(0) 编辑 收藏 举报