实体框架中的多个自引用失败,其中"主要结束"错误

时间:2016-01-18 16:58:06

标签: 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; }
}

然而结果是:

  

无法确定之间关联的主要结束   类型'步骤'和'步骤'。这种关联的主要目的必须是   使用关系流畅的API或数据显式配置   注释

当我删除其中一个NextSteps时,它可以正常工作。

我已经尝试了很多使用Fluent API或属性的方法,但似乎我无法实现这一点。根据我的阅读,EF似乎试图在父 - >子关系中连接我的2个NextStep属性,然后当然失败,因为没有定义主端。但就我而言,这些属性不属于同一种关系。

1 个答案:

答案 0 :(得分:3)

这就是问题,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方法。