EF无法确定导航属性表示的关系

时间:2018-12-10 17:28:24

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

当我尝试运行此代码时,我从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)
    {
    }
}

1 个答案:

答案 0 :(得分:1)

  

如果我删除了DbQuery,但我希望在那儿执行该代码,则该代码可以正常工作,因此我可以查询该数据而无需从工作流程中执行“包含”,并且仍然要确保在该步骤内没有直接进行任何更改。

不!您不能这样做,因为EF Core Query Type文档明确指出:

  

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

因此,对于映射,您必须将Step1Step2或实体类型,将Step3DbSet<>Workflow1设为DbSet<>