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

标签 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 定义关系是否有优势?还是不行?

提前致谢!

最佳答案

使用 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/

相关文章:

c# - 将现有的 c# 移植到 java(很多 pinvoke/user32.dll)——陷阱?

c# - 如何在 .NET 中拆分(复制)流?

c# - 使用 EF Code First 建模员工-助理关系

entity-framework - Entity Framework 匹配 int 的子集

c# - EF5 多对多更新断开连接的场景

c# - 如何使用 itext7 在固定矩形内缩放文本?

c# - 我如何着手将时间变成公共(public)整数?

entity-framework - EntityFramework.IBM.DB2 无法连接到 db2

asp.net-mvc - EF CF 和现有一对一关系的问题

entity-framework - 如何使用 Audit.NET Entity Framework Data Provider 保存 Audit.NET WebAPI 审计日志?