2016-04-25 3 views
1

Hier ist eine einfache Darstellung der beiden Klassen.Wie erstellt man eine Eins-zu-Eins-Beziehung zwischen derselben Tabelle in Entity Framework 6 Code zuerst?

public class Person 
{ 
    [Key] 
    public int ID {get; set;} 
    public virtual ICollection<Friendship> FShip{ get; set; } 
} 

    public class Friendship 
    { 
     [Key] 
     public int ID { get; set; } 

     [ForeignKey("Friend1ID")] 
     public virtual Person Friend1{ get; set; } 
     public int Friend1ID { get; set; } 

     [ForeignKey("Friend2ID")] 
     public virtual Person Friend2{ get; set; } 
     public int Friend2ID{ get; set; } 

     public double FriendshipScrore{ get; set; } 
    } 

Wenn die Tabelle erstellt wird, erwartete ich zwei Fremdschlüssel für jeden Freund. Aber es gibt einen anderen Fremdschlüssel für die Personentabelle. Person_ID (das ist das Problem)

Unten ist der entsprechende Teil in Migration Code.

ForeignKey("dbo.Persons", t => t.Friend1ID, cascadeDelete: true) 
.ForeignKey("dbo.Persons", t => t.Friend2ID, cascadeDelete: true) 
.ForeignKey("dbo.Persons", t => t.Person_ID) 
.Index(t => t.Friend1ID) 
.Index(t => t.Friend2ID) 
.Index(t => t.Person_ID); 

Antwort

2

Sie sollten auch Melodie Person Klasse angeben, verbindet explizit Friend1 Satz und Friend2 Satz an Friendship Klasse:

public class Person 
    { 
     [Key] 
     public int ID {get; set;} 

     [InverseProperty("Friend1")] 
     public virtual ICollection<Friendship> FShip1{ get; set; } 

     [InverseProperty("Friend2")] 
     public virtual ICollection<Friendship> FShip2{ get; set; } 

     [NotMapped] 
     public List<Friendship> FShip{ get { 
        return FShip1.Union(FShip2).ToList(); 
      } 
     } 
    } 
+0

Dann wird eine Person Objekt zwei Sammlungen von Freundschaften haben? Gibt es einen anderen Weg, der es uns ermöglicht, auf alle Freundschaften einer Person mit einer Liste zuzugreifen? – ozgur

+0

Ja, schauen Sie sich 'FShip' an. –

Verwandte Themen