如何在 Entity Framework 6 Code First 中的相同 table 之间创建一对一关系?

How to create one-to-one relationship between same table in Entity Framework 6 Code First?

下面是两个类的简单表示。

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

创建 table 时,我希望每个朋友都有两个外键。但是 Person table 还有另一个外键。 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);

您还应该调整 Person class 以明确指定指向 Friend1 集和 Friend2 集的链接 Friendship class:

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