c# - Entity Framework 中的多个自引用失败并出现 "principal end"错误

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

然而结果是:

Unable to determine the principal end of an association between the types 'Step' and 'Step'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

当我删除其中一个 NextSteps 时,它起作用了。

我已经尝试了很多使用 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 方法。

关于c# - Entity Framework 中的多个自引用失败并出现 "principal end"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860104/

相关文章:

c# - 如何使用 Control.DrawToBitmap 将 Form 渲染为没有装饰(标题栏、边框)的 Bitmap?

javascript - ASP.NET 更改页面时更改 session 值

c# - 从列表中选择单个项目

asp.net-mvc-3 - 如何为 MVC3 生成服务层和存储库层

c# - 无法为可组合函数创建函数导入

C# 设计模式 - 与 Base 交互

c# - 空日期时间变量

C# LINQ 多个一对多包含 where 条件

c# - Entity Framework : how do I run a stored procedure and return a value?

mysql - 关系数据库设计 - 为支付类型创建一个实体类?