将自身包含为ICollection的实体

时间:2012-02-14 07:37:44

标签: asp.net-mvc-3 entity-framework

使用实体框架。 具有树层次结构的简单页面类。

public class Page
{
    public int Id { get; set; }
    //...
    public int ParentId { get; set; } //removing this solves the problem, but I would like to keep this line
    public virtual Page Parent { get; set; }
    public virtual ICollection<Page> SubPages { get; set; }
}

当我尝试添加对象和SaveChanges时出错:

  

无法确定'Models.Page_Parent'关系的主要结尾。多个添加的实体可能具有相同的主键。

我粗略地理解了这个问题,但不知道如何解决它。

2 个答案:

答案 0 :(得分:1)

您是否尝试过定义关系?

this.HasRequired(page => t.Parent ).WithMany(t => t.SubPages).HasForeignKey(d => d.ParentId);

答案 1 :(得分:1)

使ParentId属性可以为空。根元素不会有父元素。使用流畅的配置,如@ Jayantha的回答所示。

public class Page
{
    public int Id { get; set; }
    //...
    public int? ParentId { get; set; }  like to keep this line
    public virtual Page Parent { get; set; }
    public virtual ICollection<Page> SubPages { get; set; }
}