2015-03-03 103 views
0

我想强制执行一个到(零或一个)表关系使用代码第一/流利的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

+0

你是怎么确定'StudentContact'中的'StudentId'可以有重复值的?你有没有尝试插入记录? – 2015-03-03 13:29:41

+0

@JenishRabadiya是的,我已经尝试输入一个具有相同studentID和sql服务器的记录,允许记录提交 – vincentsty 2015-03-03 13:31:47

+0

然后,如果您使用EF 6,则可以在StudentId列上应用唯一约束。http://stackoverflow.com/ a/23155759/1505865 – 2015-03-03 13:35:01

回答

4

如果要配置一个一对一的关系,实体框架需要依赖(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; } 
} 
+0

上面提到的例子是针对一对一关系的,但它不适用于创建一个表到零或一个关系(列中显示的)该职位。 – vincentsty 2015-03-03 13:48:35

+1

@vincentsty不,这是一对零或一个关系。 octavioccl是正确的。 – 2015-03-03 13:49:35

+0

@JenishRabadiya是对的,'StudentContact'是可选的,可以在'Student'实体中设置 – octavioccl 2015-03-03 13:55:33

相关问题