在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定义关系是否有优势?或不呢?

提前感谢!

在Code First 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是唯一的方法。