实体框架中的多个自引用关系
本文关键字:自引用 关系 框架 实体 | 更新日期: 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; }
}
我试图添加Manager
和LineManager
属性,这将引用相同类型的对象。当我尝试添加迁移时,我得到以下错误:
无法确定类型EmployeeDetails
和EmployeeDetails
之间关联的主端。
在添加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);
那解决你的问题了吗?