EF 2.1错误地翻译了按查询分组

时间:2018-10-11 05:32:04

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

我正在尝试针对现有数据库在EF 2.1上运行查询。我收到一个错误消息,表明我没有正确配置我的模型。

我的模特:

public class Job
{
    public int JobId { get; set; }
    public JobStatus JobStatus { get; set; }
}

public class JobStatus
{

    [Key]
    public string JobStatusId { get; set; }

    public string Colour { get; set; }

    public ICollection<Job> Jobs { get; set; }

}

我的查询

var jobs = _context.Jobs
        .GroupBy(p => p.JobStatus.Colour)
        .Select(g => new { colour = g.Key, count = g.Count() });

错误是“无效的列名'JobStatusId'。EF转换为以下查询:

SELECT [p.JobStatus].[Colour] AS [colour], COUNT(*) AS [count]
  FROM [Jobs] AS [p]
  LEFT JOIN [JobStatus] AS [p.JobStatus] ON [p].[JobStatusId] = [p.JobStatus].[JobStatusId]
  GROUP BY [p.JobStatus].[Colour]

这是不对的。 p.JobStatusId不存在,应为p.JobStatus.JobStatusId。我在做什么错了?

更新

我已将其添加到我的工作模型中;

public string JobStatusFK {get; set;}

并尝试了以下操作:

modelBuilder.Entity<Job>().HasOne(x=>x.JobStatus).HasForeignKey(p => p.AuthorFK);

但是Intellisense不允许这样做:

'ReferenceNavigationBuilder<Job, JobStatus>' does not contain a definition for 'HasForeignKey' and no accessible extension method 'HasForeignKey' accepting a first argument of type 'ReferenceNavigationBuilder<Job, JobStatus>' could be found 

2 个答案:

答案 0 :(得分:1)

那是因为您的Job : JobStatus的亲戚是Many-to-One

EF认为有一个外键引用JobStatus,即JobStatusId内的Job列设置为FK

答案 1 :(得分:0)

您必须确保JobStatusId类中的Job是FK。

您可以在Job类中使用以下声明,也可以使用流利的API在DBContext类中使用HasForeignKey

public string JobStatusId { get; set; }