实体框架中的多个自引用失败,并出现“主体端”错误
本文关键字:主体 错误 主体端 框架 失败 自引用 实体 | 更新日期: 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();
选择在方便时调用HasRequired
和HasOptional
方法。