2012-01-12 27 views
1

私はこれに対する答えを見つけようと数時間を費やしていましたが、他の投稿を見直してみましたが、何もこの問題で私を助けてくれませんでした。Entity Framework 4.1多対多自己参照関係ペイロードの問題

私は、組織内の人と組織内の他の人との関係を追跡したいと考えています。

私は2つのテーブル第一及び第二の人のためのIDと関係タイプと呼ばれる余分な列と

  1. Persons

  2. Person_Personを持っています。

他の人とのすべての関係にアクセスするためのナビゲーションプロパティが必要です。何らかの理由で

私は

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

私は余分な行を取得をしよう。

何かが私は

更新#1

これを整理助けてください合算されていません[OK]を私は人

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;} 

と呼ばれるクラスを持って明確にしましょう}

私は2つのことを行うことができるようにしたい

は、1これは、余分な行になり

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

を行うことによって、関係のコレクションをrelationshpを追加することができることです。

私は関係のテーブルを介して人を追加する場合、他のは、次のような

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

これは動作しますが、私はそれが特定の人に呼ばれる関係に表示させたいです

私はこれを行うにはどうすればよいです私は、コードが完璧な構文ではないことを明確にすることができたと思います。論理で私を助けてください。

+0

余分な行はどこにありますか?上記の行についての詳細を教えてください。 – McKay

+0

「Relationships」プロパティが参加する関係の他端は何ですか?新しいインスタンスをコレクションに追加すると、新しい行が作成されます。 – Eranga

+1

質問を「オンザフライで」書くことは良くありません。あなたの質問は完全な混乱です。 'Relationship'型のオブジェクトを保持するコレクションに' Person_Person'という未知のクラスを追加するにはどうしたらいいですか?リレーションシップコレクションに 'person2'(これは' Person'か、そうでなければ、奇妙な名前を持っていますか、誰か)をどのように追加できますか? 「余分な行」とは何ですか?あなたはまだこれを明らかにしていない。便利な答えが必要な場合は、質問に少しでも力を入れて、人々にあなたがどのような問題を抱えているか推測させてください。今のところ私はここで質問されていることを言うのは難しいので、質問を終わらせることに投票しています。 – Slauma

答えて

1

多分あなたがしようとしているものが得られていないかもしれませんが、少し複雑すぎるようです。

このように、リレーションシップクラスを作成します。

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 MyContext : DbContext 
{ 
    public DbSet<Person> People { get; set; } 
    public DbSet<Relationship> Relationships { get; set; } 
} 

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

は、その後、あなたのDbContextクラスを作成しますあなたは次のような新しい関係を作成します:

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を呼び出すことだけです。

+0

私はクラスの人に関係と呼ばれるコレクションを持っているとしましょう。これについてはどうすればいいのですか? – DevTeamExpress

+0

@DevTeamExpress - 私の編集を見てください。希望が役立ちます。 – JasCav

+0

2つの問題があります:1)あなたの 'AddRelationship'メソッドは、関係だけでなく2人の新しい人を作成します。関係を作成するために使用している 'db'コンテキストに' person1'と 'person2'を添付するか、' person1'と 'person2'がすでに別のコンテキストにアタッチされている場合 - 同じコンテキストを使用し、 1。 2)「関係」は* 2つのナビゲーションプロパティが「人」を参照しているため、「人物関係」は問題につながります。 EFは正しい逆特性を検出せず、正しいモデルを表していないかもしれない* 3つの関連を作成します。 – Slauma

関連する問題