实体框架代码优先自引用多对多,具有使用错误Id的附加属性

本文关键字:错误 Id 属性 代码 框架 自引用 实体 | 更新日期: 2023-09-27 17:59:44

我正试图首先使用EF代码(其中经理是员工)为员工和经理之间的自引用多对多关系建模。除了跟踪员工有哪些经理之外,我还需要存储经理级别。我假设我需要创建一个链接类,以便存储排名。

我的POCO课程看起来像这样:

public class Employee
{
public Guid EmployeeId {get; set;}
public String Name {get; set;}
public virtual ICollection<EmployeeManagers> EmployeeManagers { get; set; }
}
public class EmployeeManager
{
public int EmployeeManagerId {get; set;}
public int Rank {get; set;}
public Guid EmployeeId {get; set;}
public Guid ManagerId {get; set;}
public virtual Employee Manager {get; set;}
}

除了在EmployeeManager类中使用Manager对象之外,它似乎工作得很好。它使用EmployeeId来加载Manager对象,而不是ManagerId。因此,如果一个员工有4个经理,它会将employee加载到Manager对象中,而不是4个经理。

我是否对此进行了正确的建模?是否有方法强制EF使用ManagerId加载Manager?

编辑:

有人知道为什么实体框架会使用EmployeeId来尝试加载Manager吗?属性的显示顺序没有任何区别,而且ManagerId肯定比EmployeeId更可能是加载Manager的外键?

实体框架代码优先自引用多对多,具有使用错误Id的附加属性

通过添加ForeignKey属性修复了此问题:

    [ForeignKey("ManagerId")]
    public virtual Employee Manager { get; set; }