在Code First Fluent API中定义关系的优势
本文关键字:关系 定义 Code First Fluent API | 更新日期: 2023-09-27 18:01:48
我刚开始使用EF Code First。对此我有一个问题。通过Fluent API定义关系的优势是什么?
当我从我的poco(或实体)创建数据库时,我已经在我的表之间建立了一对多和/或多对多关系。
为例: public class School
{
public School()
{
Students = new List<Student>();
}
public Guid Id { get; set; }
public string Name { get; set; }
public List<Student> Student{ get; set; }
}
public class Student
{
public Guid Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public Guid SchoolId{ get; set; }
public School School{ get; set; }
}
这已经创建了学生和学校之间的关系。通过Fluent API定义关系是否有优势?或不呢?
提前感谢!
使用Fluent API的最大优势是当您需要自定义某些内容时。在你的例子中,学校和学生之间是一对多的关系。您的导航属性准确地描述了这种关系,因为您在School类上有一个List,而在Student类上有一个School属性。
Fluent API真正有用的地方是,如果出于某种原因,你想保持这种关系,但出于某种原因,你不想在school上使用navigation属性to Students:
public class School
{
public School()
{
Students = new List<Student>();
}
public Guid Id { get; set; }
public string Name { get; set; }
// remove List<Student>
}
你仍然可以使用Fluent API来描述这个关系:
modelBuilder.Entity<Student>()
.HasRequired(req => req.School)
.WithMany() // no navigation property
.HasForeignKey(fk => fk.SchoolId);
在您不想在模型本身中映射外键的场景中也很有用。如果你希望能够覆盖实体框架的某些约定,有时Fluent API是唯一的方法。