实体框架中的多个自引用失败并显示“主要结束”错误

Muh*_*Kuh 5 c# entity-framework

我正在尝试使用 Entity Framework 6 和 Code First 执行以下操作:

public class Step
{
    public int Id { get; set; }
    public Step NextStepSuccess { get; set; }
    public Step NextStepFailure { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然而结果是:

无法确定类型“Step”和“Step”之间关联的主要端。必须使用关系流畅 API 或数据注释显式配置此关联的主体端。

当我删除 NextSteps 之一时,它会起作用。

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

oct*_*ccl 4

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

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

选择您方便的拨打电话HasRequiredHasOptional方法。