C# 实体框架核心2.1未能正确转换查询

C# 实体框架核心2.1未能正确转换查询,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,我有一个现有的数据库,我从两个独立的项目中访问它,一个是ASP.NET MVC 5项目,另一个是运行.NET Core 2.1的项目,每个项目中使用各自的实体框架Verison 我的问题是,我在MVC项目上使用的查询在.NET核心项目上被错误地翻译 我的两个模型如下,一个作业有0个或多个工单: public virtual DbSet<Job> Jobs { get; set; } public virtual DbSet<WorkOrder> WorkOrders {

我有一个现有的数据库,我从两个独立的项目中访问它,一个是ASP.NET MVC 5项目,另一个是运行.NET Core 2.1的项目,每个项目中使用各自的实体框架Verison

我的问题是,我在MVC项目上使用的查询在.NET核心项目上被错误地翻译

我的两个模型如下,一个作业有0个或多个工单:

public virtual DbSet<Job> Jobs { get; set; }
public virtual DbSet<WorkOrder> WorkOrders { get; set; }

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

    public ICollection<WorkOrder> WorkOrders { get; set; }

}

public class WorkOrder
{
    [Key]
    public int WorkOrderId { get; set; }

    public Job Job { get; set; }

}
但是,此操作失败,出现以下错误:

  SELECT [x].[WorkOrderId], [x].[JobId], [x.Job].[JobId]
  FROM [WorkOrders] AS [x]
  LEFT JOIN [Jobs] AS [x.Job] ON [x].[JobId] = [x.Job].[JobId]

System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'JobId'.
如果我在数据库上运行它就会失败,因为显然没有[x].[JobId],所以EF会变得混乱。我做错了什么

更新

在数据库中,my workorders表有一个键Job_JobID,它定义了关系。不久前,我首先在旧版ASP.NET 6项目上使用EF代码创建了这些表。我在ASP.NET 6项目上使用迁移,但在.NET核心项目上不使用迁移

我有以下流畅的映射:

        modelBuilder.Entity<Job>()
                        .HasMany(x => x.WorkOrders)
                        .WithOptional(y => y.Job);
modelBuilder.Entity()
.HasMany(x=>x.WorkOrders)
.with可选(y=>y.Job);
我尝试为这两个关系添加虚拟关键字,但没有成功:

public virtual ICollection<WorkOrder> WorkOrders { get; set; }

public virtual Job Job { get; set; }
公共虚拟ICollection工作顺序{get;set;}
公共虚拟作业作业{get;set;}

您需要将外键显式添加到WorkOrder类,因为它与EFCore约定不匹配:

public class WorkOrder
{
    [Key]
    public int WorkOrderId { get; set; }

    public int Job_JobID {get;set;} 

    [ForeignKey("Job_JobID")]
    public virtual Job Job { get; set; }

}

您需要将外键显式添加到WorkOrder类,因为它与EFCore约定不匹配:

public class WorkOrder
{
    [Key]
    public int WorkOrderId { get; set; }

    public int Job_JobID {get;set;} 

    [ForeignKey("Job_JobID")]
    public virtual Job Job { get; set; }

}

实体在数据库级别上是如何关联的?一个作业对应多个工单。我最初使用asp.net项目使用EF6生成代码优先数据库。相同的查询在传统的Aspnet项目上没有问题对不起,但是您能更精确一点吗?也许可以给出模式?对于该关系,我希望WorkOrder表包含链接到作业表的外键。在类中将关系属性设置为虚拟。这两个版本中是否有任何一个通过迁移控制数据库架构?数据库中FK字段的名称是什么?实体在数据库级别上如何关联?一个作业对应多个工单。我最初使用asp.net项目使用EF6生成代码优先数据库。相同的查询在传统的Aspnet项目上没有问题对不起,但是您能更精确一点吗?也许可以给出模式?对于该关系,我希望WorkOrder表包含链接到作业表的外键。在类中将关系属性设置为虚拟。这两个版本中是否有任何一个通过迁移控制数据库架构?数据库中FK字段的名称是什么?就是这样谢谢你,我不知道这一点,所以感谢你的知识!谢谢你,我不知道这一点,所以感谢你的知识!