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

本文关键字:自引用 关系 框架 实体 | 更新日期: 2023-09-27 18:13:05

我目前有一个名为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; }
}

我试图添加ManagerLineManager属性,这将引用相同类型的对象。当我尝试添加迁移时,我得到以下错误:

无法确定类型EmployeeDetailsEmployeeDetails之间关联的主端。

在添加ManagerId, LineManagerId和LineManager属性之前,Manager属性按预期工作。

我怎么解决它?

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

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

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; }
}

生成的迁移

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);

那解决你的问题了吗?