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();
}
}