EF 5一对多自引用-代码优先

3

我已经阅读了许多自我引用的文章,但没有看到我需要的特定情况。如果我错过了,请发链接。

这是我的情况。我有两个表。Feature包含Epic的集合,而Epic可以递归地包含子Epic的集合(我可以拥有子子子(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; } 
}

我几乎可以在modelBuilder中指定关系,但有一件事情卡住了我。第一个epics集合将具有一个FeatureId FK,指向父Feature且ParentEpicId为空,但是所有下面的epic集合都将FeatureId设置为null,ParentEpicId设置为父epic的Id。(FeatureId可以指向epic子树的顶层feature,但这不是必需的)
如何在EF code first中指定此类型的关系?
如果我没有表达清楚或您需要更多信息,请告诉我。
1个回答

3

显然,FeatureIdParentEpicId在数据库中都映射为可空列,因此它们需要映射到数据模型中的可空属性。您应该将您的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; } 
}

关于要求FeatureId和ParentEpicId中只能设置一个的要求,我认为EF默认情况下没有这样的机制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接