EntityFramework 模型构建

EntityFramework model building

我有一个 class Employee,如下所示:

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Manager { get; set; }
}

我有另一个 class Manager 扩展了这个 class 并且没有添加其他功能:

public class Manager : Employee
{
}

在我的 DbContext 派生 class 我有:

public DbSet<Employee> Employees { get; set; }
public DbSet<Manager> Managers { get; set; }

我希望将 Employee.Manager == 1 的员工添加到 Managers DbSet 并将 Employee.Manager == 0 的员工添加到 Employees DbSet.

数据库 table 是以这种方式构建的,我需要能够做这样的事情,因为我有另一个 class,它有一个员工的外键和一个员工的外键经理。

我怎样才能做到这一点,或者有其他方法可以解决我的问题吗?

为了让 Code First 使用您的自定义鉴别器列,您必须使用 Fluent API 修改默认行为。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Employee>()
        .Map(e => e.Requires("Manager").HasValue(0))
        .Map<Manager>(m => m.Requires("Manager").HasValue(1));

    base.OnModelCreating(modelBuilder);
}

有几点需要注意:

  • 本场景只有一个DbSet<Employee>。一个 DbSet<Manager> 将不起作用 。从数据库中检索到的 Employee 可以通过检查 Manager 值来识别为经理,并且 var manager = new Manager() 将自动分配正确的鉴别符。

  • Employee 继承的
  • ALL 类型必须在此 modelBuilder 中为鉴别器赋予一个值。如果您跳过继承的 class,您将在访问层次结构中的任何 class 时收到运行时错误。