如何通过Entity Framework中的Fluent API设置层次结构

时间:2014-07-11 13:07:59

标签: entity-framework entity-framework-6 entity-framework-mapping

我有一个员工层级,有老板和下属。

public class Employee
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Job { get; set; }
    public virtual Employee Boss { get; set; }
    public virtual ICollection<Employee> Subordinates { get; set; }
}

我尝试按如下方式对其进行配置:

internal class EmployeeConfiguracao : EntityTypeConfiguration<Employee>
{
  public EmployeeConfiguracao()
  {
    HasOptional(p => p.Boss).WithMany(p => p.Subordinates).WillCascadeOnDelete(false);
  }
}

但是Add-Migration Init的结果 请注意,Boss不是null,但是可选(总统没有老板)

CreateTable(
    "dbo.Employees",
    c => new
        {
            Id = c.Int(nullable: false, identity: true),
            Name = c.String(nullable: false, maxLength: 90),
            Job = c.String(),
            Boss_Id = c.Int(),
        })
    .PrimaryKey(t => t.Id)
    .ForeignKey("dbo.Employees", t => t.Boss_Id)
    .Index(t => t.Boss_Id);

如何设置此层次结构,以便可以在没有老板(作为总统)的情况下使用

1 个答案:

答案 0 :(得分:0)

如果Boss应该可以为空,那么应该像这样定义:

Boss_Id = c.Int(nullable: false)

如果设置如下:

Boss_Id = c.Int()

然后将使用nullable的默认值,这是真的,所以它就像你想要的那样。