C# 实体框架中的多个自引用失败,返回“0”;“主要目的”;错误

C# 实体框架中的多个自引用失败,返回“0”;“主要目的”;错误,c#,entity-framework,C#,Entity Framework,我首先尝试使用Entity Framework 6和代码执行以下操作: public class Step { public int Id { get; set; } public Step NextStepSuccess { get; set; } public Step NextStepFailure { get; set; } } 然而,结果是: 无法确定服务器之间关联的主体端 输入'Step'和'Step'。此关联的主要端必须是 使用关系fluent API或数

我首先尝试使用Entity Framework 6和代码执行以下操作:

public class Step
{
    public int Id { get; set; }
    public Step NextStepSuccess { get; set; }
    public Step NextStepFailure { get; set; }
}
然而,结果是:

无法确定服务器之间关联的主体端 输入'Step'和'Step'。此关联的主要端必须是 使用关系fluent API或数据显式配置 注释

当我删除下一个步骤时,它会工作


我已经尝试了很多使用fluentapi或attributes的方法,但似乎无法实现。从我所读到的内容来看,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();
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(s=>s.nextstepsucture).WithMany();
modelBuilder.Entity().has可选(s=>s.NextStepFailure);

选择在您方便的时候调用
HasRequired
HasRequired
方法。

我真是太丢脸了。我在玩游戏的时候几乎就有了这个解决方案,但试图在WithMany中使用一些父列表。我从来没有想到我可以使用WithMany()没有任何参数。现在它可以工作了。Thx。不客气;)。没错,当您想要配置单向关系时,您可以不带参数地调用它。我们是否可以仅通过数据批注实现此行为?