我想首先使用Entity Framework 6代码中的流利API实现一对一关系。
我有主要班级:
public class Student
{
public int Id{ get; set;}
public string Name{ get; set;}
public StudentProfile StudentProfile { get; set; }
}
并且我有依赖类:
public class StudentProfile
{
public int Id{ get; set;}
public string Description{ get; set;}
public Student Student { get; set; }
}
此外,我具有一对一关系的配置,在这种情况下,需要两端:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasRequired(student => student.StudentProfile)
.WithRequiredPrincipal(profile => profile.Student);
base.OnModelCreating(modelBuilder);
}
执行更新数据库后,生成的生成表为:
表格StudentProfile列:
表格“学生”列:
在主程序上,我可以使用其个人资料保存学生:
UMLModel umlContext = new UMLModel();
//Studentprofile object
StudentProfile studentProfile = new StudentProfile();
studentProfile.Description = "Emily Profile Description";
//Student object
Student student = new Student();
student.Name = "Emily";
student.StudentProfile = studentProfile;
//Save Student and StudenProfile Objects
umlContext.Students.Add(student);
umlContext.SaveChanges();
执行完主程序后,在数据库上,StudentProfiles表为:
“学生”表为:
当我尝试保存一个没有其资料的学生时,问题就出现了,该程序允许保存它,而应该不允许它保存:
UMLModel umlContext = new UMLModel();
Student student = new Student();
student.Name = "John";
umlContext.Students.Add(student);
umlContext.SaveChanges();
在数据库上执行Main程序之后,对于StudentProfiles表,现在是:
和表学生:
防止这种情况的一种方法是使用数据注释,但由于域类需要附加代码,我不喜欢这种方法:
public class Student
{
public int Id{ get; set;}
public string Name{ get; set;}
[Required]
public virtual StudentProfile StudentProfile { get; set; }
}
问题:
谢谢!
答案 0 :(得分:0)
也许可以在这里查看Stack Overflow的答案,它对Entity Framework中的1:1映射给出了很好的解释,并提供了一些如何映射它们的选项,因此需要两端:https://stackoverflow.com/a/30516623/2128831