我刚开始使用 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 真正有用的地方是,如果出于某种原因你想保持这种关系,但由于某种原因你不希望导航属性指向学校的学生:
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 是唯一的方法。
关于c# - 在 Code First Fluent API 中定义关系的优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23472952/