实体框架代码首次自我引用多对多,其他属性使用错误的ID

时间:2011-06-17 19:54:06

标签: c# entity-framework database-design ef-code-first

我正在尝试使用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加载管理器?

编辑:

任何人都知道为什么实体框架会使用 EmployeeId 来尝试加载Manager?属性出现的顺序没有任何区别,并且肯定 ManagerId 更可能是加载管理器的外键而不是 EmployeeId

1 个答案:

答案 0 :(得分:1)

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

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