EF:一对一关系中的外键?

时间:2016-10-09 00:50:53

标签: entity-framework ef-code-first

请你解释一下这个。举个例子:

public class Student
{
    public Student() { }

    public int StudentId { get; set; }
    public string StudentName { get; set; }

    public virtual StudentAddress Address { get; set; }

}

public class StudentAddress 
{
    [ForeignKey("Student")]
    public int StudentAddressId { get; set; }

    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public int Zipcode { get; set; }
    public string State { get; set; }
    public string Country { get; set; }

    public virtual Student Student { get; set; }
}

我想理解为什么我们使用从属表中的主键作为外键,为什么我们不按照通常的方式:在依赖表中添加外部列,引用主体中的主键表? 并且,我们可以在这里反转角色,即使用Student实体中的主键作为外键吗?

1 个答案:

答案 0 :(得分:2)

  

为什么我们不遵循通常的方法:在中添加外来列   从属表引用主表的主键?

如果我们这样做,则关系将是1-n,而不是1-1,因为我们可能会有多个StudentAddress具有相同的此字段值。通过使用主键作为外键,我们确保不能使用具有相同值的多个StudentAddress(这将是主键冲突)。 因此,我们确保关系参照完整性为我们工作。

  

并且,我们可以在这里反转角色,即在Student中使用主键   实体作为外键?

然后我们需要首先创建StudentAddress,然后创建Student。我们可以StudentAddress没有Student。就像现在一样,我们可以Student没有任何StudentAddress,但不是相反。我认为,这更有意义。 StudentAddress是一个弱实体,这意味着除非对应的Student存在,否则它不会存在。

这些概念和其他关于表之间关系的概念通常可以在任何基本的关系模型书或课程中得到很好的解释。您可以在不详细了解它们的情况下实现EF代码,但如果您花一些时间学习如何根据一些基本规则设计数据库模型,那么您将节省很多痛苦。