实体框架4.1多对多自我引用关系有效负载问题

时间:2012-01-12 23:32:28

标签: entity-framework

我花了好几个小时试图找出答案,回顾其他帖子,但没有什么能帮助我解决这个问题。

目标是我想跟踪组织中的人与组织中其他人的关系。

我有两张桌子

  1. Persons

  2. Person_Person,其中包含第一个和第二个人的ID以及一个名为关系类型的额外列。

  3. 我希望有一个导航属性可以访问与其他人的所有关系。

    出于某种原因,当我尝试

    newperson.Relationships.add(new Person_Person(){Person1= person});
    

    我得到一个额外的行。

    有些东西没有加起来请帮我解决这个问题

    更新#1

    好的,让我澄清我有一个叫做人的课

    public class Person {
                   int personID;
                   string Name;
                  public virtual ICollection<Relationship> Relationships;
    

    }

    public class Relationship {
    
          int RelationshipID {get; set;}
          public virtual Person person1{get; set;}
          public virtual Person person2{get; set;}
          public string relationshipType {get; set;}
    

    }

    我希望能够做两件事,一件是能够通过关系集合添加一个关系来做

    Person newperson = new Person();
    newperson.Relationships.add(person2);
    

    这导致额外的行。

    另一种情况是,如果我通过关系表添加此人,例如

    Relationship relationship= new Relationship();
    relationship.person1= person1;
    relationship.person2= person2;
    relationship.relationshiptype="father";
    db.Relationships.add(relationship);
    

    这有效,但我希望它出现在特定人物中调用的关系中

    我如何做到这一点我希望我能够澄清我知道代码不是完美的语法明智,我在飞行中写它。但请帮我解释逻辑。

1 个答案:

答案 0 :(得分:1)

也许我没有得到你想要做的事情,但似乎你过分复杂了。

创建一个Relationship类,如下所示:

public class Relationship
{
  public int RelationshipID { get; set; }

  // Link the two people together.
  public virtual Person Person1 { get; set; }
  public virtual Person Person2 { get; set; }
  // You could also add a RelationshipType or something along those lines if you choose.
}

Person类看起来像这样:

public class Person
{
  public int PersonID { get; set; }
  public string Name { get; set; }
  // Add whatever else you want.
}

然后创建您的DbContext类:

public class MyContext : DbContext
{
  public DbSet<Person> People { get; set; }
  public DbSet<Relationship> Relationships { get; set; }
}

在您的存储库中,您可以创建一个新的关系:

public class MyRepository
{
  MyContext db = new MyContext();

  public void AddRelationship(Person person1, Person person2) 
  {
    var relationship = new Relationship
    {
      Person1 = person1,
      Person2 = person2
    }

    db.Relationships.Add(relationship);
    db.SaveChanges();
  }
}

您所要做的就是从需要它的任何类(您的控制器或其他类)调用AddRelationship。