与一个表的一对多关系会导致EF建模出错

时间:2014-04-04 14:01:00

标签: c# entity-framework asp.net-mvc-4

我在EF6中创建了一个包含多个表的模型,其中一个表是 ContentGrouptable ,具有以下结构:

public partial class ContentGroup
{
    public ContentGroup()
    {
        this.Contents = new HashSet<Content>();
        this.ContentGroups = new HashSet<ContentGroup>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Visible { get; set; }
    public long Ordering { get; set; }
    public string CommentState { get; set; }
    public int ContentGroupId { get; set; }

    public virtual ICollection<Content> Contents { get; set; }
    public virtual ICollection<ContentGroup> ContentGroups { get; set; }
    public virtual ContentGroup ContentGroup1 { get; set; }
}

正如您所看到的,此表格与whit本身有关系。 Id列中的一对多。在此表中,我们有一个 FK-ContentGroupId 引用自身( ContentGroup)。所以我使用MVC4(ASP)为这个实体创建一个视图,所以当我想在我的表中插入一个值时,我得到了这个错误:

"Unable to determine a valid ordering for dependent operations. Dependencies may 
exist due to foreign key constraints, model requirements, or store-generated 
values."

那我该怎么办呢?因为FK?

祝你好运

1 个答案:

答案 0 :(得分:0)

问题是你有一个不可为空的ContentGroupId。这意味着当您插入ContentGroup时,您还必须设置其父ContentGroup。但这是一个鸡和蛋的问题(或者:没有&#34;有效的订购&#34;)。您无法同时插入父母和子女,它始终是顺序操作。然后,必须始终有一个所有父母的母亲&#34;,而不是父母本身。

所以,让ContentGroupId可以为空并映射关联,如下所示:

modelBuilder.Entity<ContentGroup>()
    .HasOptional(cg => cg.ContentGroup1)
    .WithMany(cg => cg.ContentGroups)
    .HasForeignKey(cg => cg.ContentGroupId);