当我尝试运行此代码时,我从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)
{
}
}
答案 0 :(得分:1)
如果我删除了DbQuery,但我希望在那儿执行该代码,则该代码可以正常工作,因此我可以查询该数据而无需从工作流程中执行“包含”,并且仍然要确保在该步骤内没有直接进行任何更改。
不!您不能这样做,因为EF Core Query Type文档明确指出:
实体不能包含用于查询类型的导航属性。
因此,对于映射,您必须将Step1
为Step2
或实体类型,将Step3
,DbSet<>
,Workflow1
设为DbSet<>
。