gpt4 book ai didi

c# - Entity Framework Core 2.1 无法正确翻译查询

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:25 25 4
gpt4 key购买 nike

我有一个现有的数据库,我正在从 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 变得很困惑。我做错了什么?

更新

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

我有以下流畅的映射:

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

我尝试为这两个关系添加 virtual 关键字,但没有成功:

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

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

}

关于c# - Entity Framework Core 2.1 无法正确翻译查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51455003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com