一对零或一个关系实体框架

时间:2015-03-03 13:22:59

标签: c# entity-framework ef-code-first ef-fluent-api

我正在尝试使用代码first / fluent api强制执行一对(零或一)表关系,目标表如下所示。

学生可能只有联系人(StudentContact) 但每个联系人(StudentContact)都必须有学生

StudentID StudentName
1         StudentA
2         StudentB

StudentContactID StudentContact StudentID
1                123456789      1
2                123456789      2

我尝试使用

EntityName<Student>().HasOptional(x => x.StudentContact).WithRequired(l => l.Student)

但不幸的是,它没有为StudentID列强制实施一个关系,这意味着StudentID列可能包含重复值。

参考:One to zero/one relation in entity framework code first

1 个答案:

答案 0 :(得分:4)

在配置一对一关系时,Entity Framework要求从属(StudentContact)的主键也是外键。实现你想要的东西的正确方法可能是这个,但是正在使用数据注释:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }

    public StudentContact StudentContact { get; set; }
}

public class StudentContact
{
    [Key, ForeignKey("Student")]
    public int StudentId { get; set; }
    public int Contact { get; set; }
    public Student Student { get; set; }
}