在Code First Fluent API中定义关系的优势?

时间:2014-05-05 12:51:48

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

我刚开始使用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定义关系是否有优势?或者不是?

提前致谢!

1 个答案:

答案 0 :(得分:1)

使用Fluent API的最大优势是您需要自定义某些内容。在你的例子中,你在学校和学生之间有一对多的关系。您的导航属性完全描述了这种关系,因为您在School类上有一个List,并且您在Student上有一个School属性。

如果Fluent API变得非常有用,如果由于某种原因你想要保持这种关系,但由于某种原因你不想要导航属性给学校的学生:

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);

在您不想在模型本身中映射外键的情况下,它也很有用。如果您希望能够覆盖Entity Framework的某些约定,有时Fluent API是唯一的方法。