实体框架中的多个自引用失败,并出现“主体端”错误

本文关键字:主体 错误 主体端 框架 失败 自引用 实体 | 更新日期: 2023-09-27 18:30:47

我正在尝试使用实体框架 6 和代码优先执行以下操作:

public class Step
{
    public int Id { get; set; }
    public Step NextStepSuccess { get; set; }
    public Step NextStepFailure { get; set; }
}

然而,结果是:

无法确定 键入"步骤"和"步骤"。此关联的主要端必须是 使用关系流畅 API 或数据显式配置 附注。

当我删除其中一个后续步骤时,它可以工作。

我已经尝试了很多使用 Fluent API 或属性的方法,但似乎我无法做到这一点。从我读到的内容来看,EF 似乎尝试在父子关系中连接我的 2 个 NextStep 属性>然后当然失败,因为未定义主体端。但就我而言,这些属性不是同一关系的一部分。

实体框架中的多个自引用失败,并出现“主体端”错误

这就是问题所在,EF 正在尝试创建一对一的关系,并希望您指定哪一端是主体。如果要创建两个不同的关系,那么我建议您覆盖上下文OnModelCreating方法并添加以下配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  modelBuilder.Entity<Step>().HasRequired(s=>s.NextStepSuccess).WithMany();
  modelBuilder.Entity<Step>().HasOptional(s=>s.NextStepFailure).WithMany();

选择在方便时调用HasRequiredHasOptional方法。