实体框架中的多个自引用关系

Jam*_*mes 6 .net c# asp.net-mvc entity-framework

我目前有一个叫做EmployeeDetails下面的类.

public class EmployeeDetails {

    public int EmployeeDetailsId { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }

    [ForeignKey("Manager")]
    public int? ManagerId { get; set; }
    public virtual EmployeeDetails Manager { get; set; }
    [ForeignKey("LineManager")]
    public int? LineManagerId { get; set; }
    public virtual EmployeeDetails LineManager { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试添加ManagerLineManager引用相同类型对象的属性.当我尝试添加迁移时,我收到以下错误:

无法确定类型EmployeeDetails和之间关联的主要结束EmployeeDetails.

在添加LineManagerIdManagerId和LineManager属性之前,Manager属性按预期工作.

我该如何解决?

Fab*_*Luz 4

您必须指定关系的另一方。像这样:

public class EmployeeDetails
{

    public int EmployeeDetailsId { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }

    [ForeignKey("Manager")]
    public int? ManagerId { get; set; }

    public virtual EmployeeDetails Manager { get; set; }

    [ForeignKey("LineManager")]
    public int? LineManagerId { get; set; }

    public virtual EmployeeDetails LineManager { get; set; }

    [ForeignKey("ManagerId")]
    public virtual ICollection<EmployeeDetails> ManagedEmployees { get; set; }

    [ForeignKey("LineManagerId")]
    public virtual ICollection<EmployeeDetails> LineManagedEmployees { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

生成的迁移

CreateTable(
    "dbo.EmployeeDetails",
    c => new
        {
            EmployeeDetailsId = c.Int(nullable: false, identity: true),
            Name = c.String(),
            Title = c.String(),
            ManagerId = c.Int(),
            LineManagerId = c.Int(),
        })
    .PrimaryKey(t => t.EmployeeDetailsId)
    .ForeignKey("dbo.EmployeeDetails", t => t.LineManagerId)
    .ForeignKey("dbo.EmployeeDetails", t => t.ManagerId)
    .Index(t => t.ManagerId)
    .Index(t => t.LineManagerId);
Run Code Online (Sandbox Code Playgroud)

这能解决你的问题吗?