我有两张表,我在其中保存了人与人之间的关系。我想要层次结构,所以我的两个表是:
Persons
-----------
IDPerson
Name
PersonRelation
-----------------
IDPersonRelation
IDPerson
IDRootPerson
IDParentPerson
Left
Right
Deep
IDPerson 是一个自动数字,而 IDRelation 是其他自动数字。
然后,在 SQL Server 中,我创建了 3 个关系:
1) PersonRelation.IDPerson = Persons.IDPerson 2) PersonRelation.IDPersonRoot = Persons.IDPerson 3) PersonRelation.IDPersonParent = Persons.IDPerson
有了第一个关系,我想知道层次树的实际节点的人的信息(姓名,电话...)
对于第二个关系,我想要属于实际节点的那种树的根的信息。
有了三个房地产,我想要父母。
嗯,这就是要有一个想法,最重要的是我有两个表,三个关系,因为是问题的原因。层次结构是这样的。
好吧,现在使用 EF,我使用以下代码来查看这是否有效:
Persons person1 = new Persons();
person1.Name= "person01";
PersonRelation1 relation1 = new PersonRelations();
relation1.Left = 1;
relation.Right = 2;
relation.Deep = 0;
person1.PersonRelations.Add(relation1);
//I am using self tracking entities, so I apply changes
miContext.ApplyChanges<Persons>("Persons", person1);
miContext.SaveChanges();
这很好用,但是如果我尝试添加两个人及其关系,那么我在 saveChanges 中遇到问题,它说存在两个具有相同键的实体。代码如下:
Persons person1 = new Persons();
person1.Name= "person01";
PersonRelation1 relation1 = new PersonRelations();
relation1.Left = 1;
relation.Right = 2;
relation.Deep = 0;
person1.PersonRelations.Add(relation1);
Persons person2 = new Persons();
person2.Name= "person02";
PersonRelation2 relation2 = new PersonRelations();
relation2.Left = 1;
relation2.Right = 2;
relation2.Deep = 0;
person2.PersonRelations.Add(relation2);
//I am using self tracking entities, so I aply changes
miContext.ApplyChanges<Persons>("Persons", person1);
miContext.ApplyChanges<Persons>("Persons", person2);
miContext.SaveChanges();
为什么一个寄存器可以工作,而当我尝试添加两个或更多时我会遇到问题?因为我正在尝试两个添加两个不同的实体。
非常感谢你。