我已阅读过一对多的自引用帖子,但已经看到了我的具体排列。如果我错过了,请发布链接。
这是我的情景。我有两张桌子。功能包含Epics的集合,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; }
}
我几乎可以在模型构建器中指定关系但是挂起了一件事。第一个史诗集合将FeatureId FK返回到父特征和null ParentEpicId,但是此下面的所有级别的史诗集合都将FeatureId设置为null,ParentEpicId设置为父史诗的Id。 (FeatureId可以指向史诗儿童树的顶级特征,但这不是必需的)
如何在EF代码中首先指定这种类型的关系?
如果不清楚或您需要更多信息,请告诉我。
答案 0 :(得分: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中没有开箱即用的这种机制。