0

我有两张表,我在其中保存了人与人之间的关系。我想要层次结构,所以我的两个表是:

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();

为什么一个寄存器可以工作,而当我尝试添加两个或更多时我会遇到问题?因为我正在尝试两个添加两个不同的实体。

非常感谢你。

4

1 回答 1

0

好吧,问题是我需要将 PersonRelation 添加到 Person 实体的三个集合中,所以我需要执行以下操作:

Persons person1 = new Persons();
person1.Name= "person01";

PersonRelation1 relation1 = new PersonRelations();
relation1.Left = 1;
relation.Right = 2;
relation.Deep = 0;
person1.PersonRelations.Add(relation1);
person1.PersonRelations1.Add(relation1);
person1.PersonRelations2.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);
person2.PersonRelations1.Add(relation2);
person2.PersonRelations2.Add(relation2);

miContext.ApplyChanges<Persons>("Persons", person1);
miContext.ApplyChanges<Persons>("Persons", person2);
miContext.SaveChanges();

我的意思是,Person 实体有 3 个集合,每个关系一个,需要将 PersonRelation 实体添加到这三个集合中。

谢谢。

于 2012-08-17T13:50:10.823 回答