C# EF 5一对多自参考-代码优先

C# EF 5一对多自参考-代码优先,c#,entity-framework,entity-framework-5,code-first,C#,Entity Framework,Entity Framework 5,Code First,我已经阅读了许多一对多的自我参考文章,但也看到了我的具体排列。如果我错过了,请张贴链接 这是我的设想。我有两张桌子。特性包含一个史诗集合,史诗可以递归地包含一个子史诗集合(我可以有子(n)个史诗集合) 下面是我希望创建的模型类型的简单概述 public class Feature { public int Id { get; set; } public string Name { get; set; } public virtual ICollection<Epi

我已经阅读了许多一对多的自我参考文章,但也看到了我的具体排列。如果我错过了,请张贴链接

这是我的设想。我有两张桌子。特性包含一个史诗集合,史诗可以递归地包含一个子史诗集合(我可以有子(n)个史诗集合)

下面是我希望创建的模型类型的简单概述

public class Feature
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Epic> Epics { get; set; } 
}

public class Epic
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int FeatureId { get; set; }

    public int ParentEpicId { get; set; }
    public virtual ICollection<Epic> ChildEpics { get; set; } 
}
公共类功能
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection史诗{get;set;}
}
公共级史诗
{
公共int Id{get;set;}
公共字符串名称{get;set;}
public int FeatureId{get;set;}
public int ParentEpicId{get;set;}
公共虚拟ICollection子对象{get;set;}
}
我几乎可以在modelBuilder中指定关系,但有一件事让我挂断了电话。第一个epic集合将有一个FeatureId FK返回到父要素,并且有一个空的ParentEpicId,但是低于该集合的所有级别的epic集合将有一个FeatureId设置为空,ParentEpicId设置为父epic的Id。(FeatureId可以指向史诗子树的顶级功能,但这不是必需的)

如何首先在EF代码中指定这种类型的关系


如果我不清楚或者您需要更多信息,请告诉我。

因为显然,
FeatureId
ParentEpicId
都映射到数据库中的可空列,它们需要映射到数据模型中的可空属性。您应该将
Epic
类更改为:

public class Epic
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int? FeatureId { get; set; }

    public int? ParentEpicId { get; set; }
    public virtual ICollection<Epic> ChildEpics { get; set; } 
}
公共类史诗
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共int?FeatureId{get;set;}
public int?ParentEpicId{get;set;}
公共虚拟ICollection子对象{get;set;}
}
至于必须设置FeatureId和ParentEpicId中的一个的要求,我认为EF中没有现成的机制