我刚开始使用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定义关系是否有优势?或者不是?
提前致谢!
答案 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是唯一的方法。