【问题标题】:EF Unable to determine the relationship represented by navigation propertyEF 无法确定导航属性表示的关系
【发布时间】:2018-12-11 01:38:32
【问题描述】:

当我尝试运行此代码时,我从 EntityFramework 得到一个异常,它无法确定由类型为“Step1”的导航属性“Workflow1.Step1”表示的关系。我试图在 OnModelCreating 中盲目配置它,但没有运气,知道如何解决这个问题吗?

如果我删除 DbQuery,代码可以正常工作,但我希望它在那里,这样我就可以在不从工作流中执行包含的情况下查询该数据,并且仍然确保没有直接在步骤内进行任何更改。

public class Workflow1
{
        public Guid Id { get; private set; }

        public Guid Step1Id {get; private set;}
        public Step1 Step1 {get; private set;}

        public Guid Step2Id {get; private set;}
        public Step2 Step2 {get; private set;}

        public Guid Step3Id {get; private set;}
        public Step3 Step3 {get; private set;}
}

public class Workflow2
{
        public Guid Step2Id {get; private set;}
        public Step2 Step2 {get; private set;}

        public Guid Step4Id {get; private set;}
        public Step5 Step4 {get; private set;}
}

public class Step1 
{
    public Guid Id { get; private set; }
}

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) :base(options)
    {}

    public DbSet<Workflow1> Workflow1 { get; set; }
    public DbSet<Workflow2> Workflow2 { get; set; }

    public DbQuery<Step1> Step1 { get; set; }
    public DbQuery<Step3> Step2 { get; set; }
    public DbQuery<Step3> Step3 { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    }
}

【问题讨论】:

    标签: c# asp.net-core entity-framework-core


    【解决方案1】:

    如果我删除 DbQuery,代码可以正常工作,但我希望它在那里,这样我就可以在不从工作流中执行包含的情况下查询该数据,并且仍然确保没有直接在步骤内进行任何更改。

    不!你不能这样做,因为EF Core Query Type 文档清楚地表明:

    实体不能包含查询类型的导航属性。

    因此,对于映射,您必须将 Step1Step2Step3 设为 DbSet&lt;&gt;,因为 Workflow1DbSet&lt;&gt; 或实体类型类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多