3

我已经阅读了许多一对多的自引用帖子,但看到了我的具体排列。如果我错过了,请发布链接。

这是我的场景。我有两张桌子。特征包含史诗的集合,史诗可以递归地包含子史诗的集合(我可以有子子子(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; } 
}

我几乎可以在模型构建器中指定关系,但被一件事挂断了。第一个史诗集合将有一个返回父 Feature 的 FeatureId FK 和一个 null ParentEpicId,但在此之下的所有级别的史诗集合都将 FeatureId 设置为 null,ParentEpicId 设置为父史诗的 Id。(FeatureId 可以指向史诗儿童树的顶级特征,但这不是必需的)

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

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

4

1 回答 1

3

显然,两者都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; } 
}

至于必须设置FeatureId和ParentEpicId其中一个的要求,我认为EF中没有开箱即用的这种机制。

于 2013-02-13T21:30:33.130 回答