Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架代码首先使用错误的Id自引用具有附加属性的多对多_C#_Entity Framework_Database Design_Ef Code First - Fatal编程技术网

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

C# 实体框架代码首先使用错误的Id自引用具有附加属性的多对多,c#,entity-framework,database-design,ef-code-first,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> Employe

我试图首先使用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;}
}
公共类员工
{
公共Guid EmployeeId{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection EmployeeManager{get;set;}
}
公共类员工经理
{
public int EmployeeManagerId{get;set;}
公共整数秩{get;set;}
公共Guid EmployeeId{get;set;}
公共Guid ManagerId{get;set;}
公共虚拟员工管理器{get;set;}
}
除了在EmployeeManager类中使用Manager对象外,它似乎工作得很好。它使用EmployeeId来加载Manager对象,而不是ManagerId。因此,如果一个员工有4个经理,它会将该员工加载到Manager对象中,而不是加载到4个经理中

我是否正确地对此进行了建模,是否有方法强制EF使用ManagerId加载管理器

编辑:


有人知道为什么实体框架会使用EmployeeId来加载管理器吗?属性出现的顺序没有任何区别,显然ManagerId更可能是加载经理的外键,而不是EmployeeId

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

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