我在将记录从一个表插入到另一个表时遇到问题,因为表架构是相同的
Table 1
Id Parent Id Text
11 Null A
12 Null B
13 11 C
14 11 D
15 13 E
记录应该以这种格式插入,我必须复制外键关系而不是它的身份。
Table 2
Id Parent Id Text
31 Null A
32 Null B
33 31 C
34 31 D
35 33 E
答案 0 :(得分:0)
在Database
方面可以轻松实现您想要的。
但是由于您正在寻找一种linq
方法。这是可以实现的方法。
该过程分为两个部分:
希望您拥有Table1
和Table2
的模型,例如(使用您认为有用的顺序。对于我来说,Table1
是临时表):
Public class myEntity
{
public int Id{get; set;}
public int? ParentId{get; set;}
public string Text{get; set;}
}
第一个:从Text
复制所有Table A
属性,并通过递增Table B
IDs
var Table2 = new List<myEntity>();
Table1.Select(s=>s.Text).OrderBy(o=>o).ToList().ForEach(f=>
{
//now append the texts to
Table2.Add(new tablesTest { Id = (Table2.Count + 1), Text = f });//remove the Id property manupulation or set it to 0 if you are inserting directly in the database and use the context.SaveChanges();(*if entity-framework*) once the insertion is complete.
}}
第二个:使用self-join
创建映射表以获取Table1
中条目之间的父子关系,然后更新Table2
中的条目< / p>
var parentChildListFromTb1 = from m in Table1
join ch in Table1 on m.Id equals ch.ParentId
select new
{
Id = ch.Id,
Parent = m.Text,
Text = ch.Text
};
哪个会给您输出:
----------------------------
| Id | Parent | Text |
----------------------------
| 13 | A | C |
----------------------------
| 14 | A | D |
----------------------------
| 15 | C | E |
----------------------------
现在有了parent-child
列表之后,我们现在通过查询Table2
并用其受尊重的ID更新其ParentId来创建子列表:
parentChildListFromTb1.ForEach(f=>{
var ChildEntity = Table2.Single(s => s.Text.Equals(f.Text));//fetching the child entity from Table2
ChildEntity.ParentId = Table2.Single(s => s.Text.Equals(f.Parent)).Id;//updating the parentIds in Table2
});
Table2
看起来像:
------------------------------
| Id | ParentId | Text |
------------------------------
| 1 | null | A |
------------------------------
| 2 | null | B |
------------------------------
| 3 | 1 | C |
------------------------------
| 4 | 1 | D |
------------------------------
| 5 | 3 | E |
------------------------------
答案 1 :(得分:0)
我已经找到了解决这个问题的方法。
步骤: 将Text列值插入到主表中,将ParentId保留为空,同时将这些值作为oldId键插入到Dictionary中,并将New Inserted Id作为对应键值插入到
中。插入后,根据映射的字典keyValue对更新值