带有 Guid 外键的 EF Core 列表导航属性是否可以使用 Include 返回多个实体?

问题描述 投票:0回答:1

我有两张桌子,我无法更改。两者都有一个 job_id 列,它是一个 Guid,本质上以一对多关系连接这些表。

SQL 中这些表之间没有外键。我想要有两个 ef 核心实体,它们之间有一个导航属性。一个 SysJob 包含多个 SysJobSteps。

具有 Guid 外键的列表导航属性是否可以返回多个实体?

这是我的代码:

public class SysJob
{
    public Guid JobId { get; set; }

    public List<SysJobStep> SysJobSteps { get; set; }

    public string Name { get; set; }
    public string Description { get; set; }
}
public class SysJobStep
{
    public Guid JobId { get; set; }

    public SysJob SysJob { get; set; }

    public string StepName { get; set; }
    public string Command { get; set; }
}

模型构建器:

modelBuilder.Entity<SysJob>()
    .HasKey(j => j.JobId);
modelBuilder.Entity<SysJob>()
    .HasMany(j => j.SysJobSteps)
    .WithOne(s => s.SysJob)
    .HasForeignKey(j => j.JobId);

modelBuilder.Entity<SysJobStep>()
     .HasKey(s => s.JobId);

但是,我的包含查询仅为每个 SysJob 返回一个 SysJobStep:

var x = context.SysJobs
    .Include(j => j.SysJobSteps)
    .ToList();

我将查询记录到控制台中,发现 EF Core 本身调用了一个 sql 查询,它返回的行数比 linq 查询更多。

c# linq entity-framework-core
1个回答
0
投票

导航属性仅返回单个实体的原因是因为 job_id 列不唯一。应使用“step_uid”列。

modelBuilder.Entity<SysJobStep>()
    .HasKey(s => s.StepUId);
public class SysJobStep
{
    public Guid JobId { get; set; }
    public Guid StepUId { get; set; }

    public SysJob SysJob { get; set; }

    public string StepName { get; set; }
    public string Command { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.