【问题标题】:Entity Framework Core 2.1 failing to translate query properlyEntity Framework Core 2.1 无法正确翻译查询
【发布时间】:2018-12-29 12:02:03
【问题描述】:

我有一个现有的数据库,我从 2 个单独的项目中访问它,一个是 ASP.NET MVC 5 项目,另一个是运行 .NET Core 2.1 的项目,每个项目都使用各自的 Entity Framework 版本。

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

我的 2 个模型如下,一个 Job 有 0 个或多个 Workorders:

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; }

}

我已删除所有不相关的字段。

我在 .NET 核心项目中使用的查询非常简单:

await _context.WorkOrders
.Include(x => x.Job)
.ToListAsync();

但是这失败并出现以下错误:

  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 变得很困惑。我做错了什么?

更新

在数据库中,我的 workorders 表有一个键 Job_JobID,它定义了关系。我最初在旧的 ASP.NET 6 项目上使用 EF Code First 创建了这些表。我在 ASP.NET 6 项目上使用迁移,但不在 .NET Core 项目上。

我有以下流畅的映射:

        modelBuilder.Entity<Job>()
                        .HasMany(x => x.WorkOrders)
                        .WithOptional(y => y.Job);

我尝试为这两种关系添加虚拟关键字,但没有成功:

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

public virtual Job Job { get; set; }

【问题讨论】:

  • 实体在数据库级别是如何关联的?
  • 一个工作对应多个工作订单。我最初使用 asp.net 项目使用 ef 6 生成代码优先数据库。相同的查询在旧的 Aspnet 项目上没有问题
  • 抱歉,您能说得更准确些吗?也许可以给出架构?对于这种关系,我希望 WorkOrder 表包含一个链接到 Job 表的外键。
  • 在类中将关系属性设置为虚拟
  • 这两个版本中的任何一个是否通过迁移来控制数据库架构?数据库中FK字段的名称是什么?

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


【解决方案1】:

您需要将外键显式添加到 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; }

}

【讨论】:

  • 就是这样谢谢你,我不知道这一点,所以感谢知识!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多