2016-04-25 9 views
1

ここに2つのクラスの単純な表現があります。Entity Framework 6のコードテーブルで同じテーブル間に一対一の関係を作成する方法

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

テーブルが作成されるとき、私は各友達に2つの外部キーが必要であると考えていました。しかし、Personテーブルのための別の外部キーがあります。 Person_ID(これは問題です)

以下は、移行コードの対応する部分です。

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

答えて

2

かも指定するチューンPersonクラスが明示的にFriendshipクラスでFriend1セットとFriend2セットにリンクする必要があります。そして、人物オブジェクトは友情の2つのコレクションを持っています

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

? 1つのリストを持つ人のすべての友情にアクセスできる他の方法はありますか? – ozgur

+0

はい、 'FShip'プロパティを見てください。 –

関連する問題