C# EF6编码具有相同类型导航属性集合的第一个实体-如何告诉EF关系是什么?

C# EF6编码具有相同类型导航属性集合的第一个实体-如何告诉EF关系是什么?,c#,entity-framework,entity-framework-6,relationships,navigation-properties,C#,Entity Framework,Entity Framework 6,Relationships,Navigation Properties,我不太了解EF,所以请容忍我在无知和困惑中跋涉。我有一个限制,我不能更改数据库结构 TBLGRADES GRADEID GUID (PK) | GRADETITLE VARCHAR -------------------------------------------------------------- 882349d4-2564-4160-a034-2a5116dec389 | Cool Grade 59539804-5c47-46ac-873d-65

我不太了解EF,所以请容忍我在无知和困惑中跋涉。我有一个限制,我不能更改数据库结构

TBLGRADES

GRADEID GUID  (PK)                   | GRADETITLE VARCHAR
--------------------------------------------------------------
882349d4-2564-4160-a034-2a5116dec389 | Cool Grade

59539804-5c47-46ac-873d-65b33ce6ac94 | Not so cool grade

b00d6cdd-3273-4f83-8d18-0c9e9a3e1562 | Lame Grade
GRADEID GUID  (FK)                    | ELIGIBLEGRADEID GUID (FK)
----------------------------------------------------------------------------
882349d4-2564-4160-a034-2a5116dec389  | 59539804-5c47-46ac-873d-65b33ce6ac94

882349d4-2564-4160-a034-2a5116dec389  | b00d6cdd-3273-4f83-8d18-0c9e9a3e1562
TBLGRADESRELATIONSHIPS

GRADEID GUID  (PK)                   | GRADETITLE VARCHAR
--------------------------------------------------------------
882349d4-2564-4160-a034-2a5116dec389 | Cool Grade

59539804-5c47-46ac-873d-65b33ce6ac94 | Not so cool grade

b00d6cdd-3273-4f83-8d18-0c9e9a3e1562 | Lame Grade
GRADEID GUID  (FK)                    | ELIGIBLEGRADEID GUID (FK)
----------------------------------------------------------------------------
882349d4-2564-4160-a034-2a5116dec389  | 59539804-5c47-46ac-873d-65b33ce6ac94

882349d4-2564-4160-a034-2a5116dec389  | b00d6cdd-3273-4f83-8d18-0c9e9a3e1562
我想先用EF代码来表示这一点,我正在努力,因为我不知道EF是如何工作的,但我可以用EF代码生成来实现它。如果我不能首先使用代码让它工作,那么我就只能满足于EF代码gen。希望有人能清除我脑海中的乌云

实体

[Table("TBLGRADES")]
public class Grade
{
    public GUID GradeId { get; set; }
    public string GradeTitle { get; set; }
    public virtual ICollection<Grade> EligibleGrades { get; set; }
}
请帮助我了解协会,以便我可以让它发挥作用。谢谢。我的第一篇SO帖子,所以请温和一点。

这是一种(自我参照)多对多关系:一个等级可以有许多合格等级,一个等级可以是许多其他等级的合格等级。您可以将其视为
Grade
实体有另一个(隐藏)集合,如:

public class Grade
{
    public GUID GradeId { get; set; }
    public string GradeTitle { get; set; }
    public virtual ICollection<Grade> EligibleGrades { get; set; }
    public virtual ICollection<Grade> GradesThisIsAnEligibleGradeFor { get; set; }
}

您问题中的最后一个代码段现在应该可以使用此映射,并给出您期望的结果。

这绝对是完美的!在参数less WithMany()上,我假设如果我想向上遍历图形以找出当前等级符合条件的等级,我必须在那里配置它?还是我理解错了?@user3215462:是的,然后你会使用
。和许多(g=>g.GradesThisIsAnEligibleGradeFor)