Entity framework core EF核心5中的自我参照关系

Entity framework core EF核心5中的自我参照关系,entity-framework-core,ef-code-first,Entity Framework Core,Ef Code First,我正在尝试在数据库中创建一个树结构,其中的项可以相互引用。我认为这是一个简单的任务,然而,英孚核心决定罢工。我无法让它生成正确的外键,它不断引发异常: 无法确定“Item”类型的导航“Item.Parent”表示的关系。手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.ignore”忽略此属性。 我的课看起来像这样(简化): 公共类项目 { [关键] [数据库生成(DatabaseGeneratedOption.I

我正在尝试在数据库中创建一个树结构,其中的项可以相互引用。我认为这是一个简单的任务,然而,英孚核心决定罢工。我无法让它生成正确的外键,它不断引发异常:

无法确定“Item”类型的导航“Item.Parent”表示的关系。手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.ignore”忽略此属性。

我的课看起来像这样(简化):

公共类项目
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共Guid Id{get;set;}
[外键(“母公司”)]
公共Guid?父ID{get;set;}
公共虚拟项父项{get;set;}
[反向财产(“母公司”)]
公共虚拟IEnumerable子项{get;set;}
}
我甚至试着搬走孩子们的财产,但结果是一样的

我尝试过的另一件事是Fluent API:

entity
    .HasOne(e => e.Parent)
    .WithMany(e => e.Children)
    .HasForeignKey(e => e.ParentId);

//or 
entity
    .HasOne<Item>(e => e.Parent)
    .WithMany()
    .HasForeignKey(e => e.ParentId);

//or
entity
    .HasMany(e => e.Children)
    .WithOne(e => e.Parent)
    .HasForeignKey(e => e.ParentId);

//or
entity
    .HasMany(e => e.Children)
    .WithOne(e => e.Parent);
实体
.HasOne(e=>e.Parent)
.有许多(e=>e.儿童)
.HasForeignKey(e=>e.ParentId);
//或
实体
.HasOne(e=>e.Parent)
.有很多
.HasForeignKey(e=>e.ParentId);
//或
实体
.HasMany(e=>e.Children)
.有一个(e=>e.Parent)
.HasForeignKey(e=>e.ParentId);
//或
实体
.HasMany(e=>e.Children)
.有一个(e=>e.父母);
他们都不断产生相同的错误,我有点迷失在我做错了什么


我也在看一些其他的答案,它们看起来很像我要做的,但是,我的EF不会生成迁移。

忽略这个问题,我已经发现了我自己的错误。我将把它留在这里,以防有人面临同样的问题,因为错误消息是非常误导的

发生了一个复制粘贴问题,我为一个不相关的实体创建了另一个配置,但忘记了更新类型:

    {
        public void Configure(EntityTypeBuilder<Item> entity)
        {
            entity
                .HasNoKey();
        }
    }
{
公共void配置(EntityTypeBuilder实体)
{
实体
.HasNoKey();
}
}
注意泛型定义中的类型。这导致EF-Core删除了最初在实体上设置的键,并使EF-Core对关系感到困惑(因为现在我将外键定位于既不是键也不是索引的属性)

    {
        public void Configure(EntityTypeBuilder<Item> entity)
        {
            entity
                .HasNoKey();
        }
    }