我正在尝试针对现有数据库在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
答案 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; }