Entity Framework Core 6 FromSql“列引用“id”不明确”

问题描述 投票:0回答:1

我首先使用 Entity Framework Core 6 代码和 Postgresql 数据库,我发现 EF Core 生成不必要的复杂查询,该查询运行几秒钟,但可以优化到几毫秒。

我有一个基于

的优化查询
dbContext.Set<xx>().ToQueryString()

我想使用

FromSqlRaw
方法运行它,但出现错误

列引用“id”不明确

在查询中有多个表,并且它们有 id 列,但在查询中它们带有别名,例如 a.id、b.id 等。即便如此,我仍然收到该错误。我该如何修复该错误?

c# .net postgresql entity-framework-core ef-core-6.0
1个回答
0
投票

我已经用另一种方式修复了性能。我必须加入的一些实体包含数十万条记录。最简单的查询

    dbContext.Set<Invoice>()
    .Include(x=> x.CreatedBy)
    .Include(x=> x.Customer)
...

运行效率低下,因为 CreatedBy 和 Customer 实体有另一个连接,例如 Customers 和 Users 表可以有数十万条记录。

我所做的,我首先运行了一个简单的查询,

var inv = await dbContext.Set<Invoice>().Where(x=> x.Id == 'xxx').FirstOrDefaultAsync();

然后我将此对象的结果添加到相关对象的过滤器中

    dbContext.Set<Invoice>()
    .Where(x=> x.Id == 'xx' && x.CreatedBy.Id == inv.CreatedById && x.Customer.Id = inv.CustomerId)
    .Include(x=> x.CreatedBy)
    .Include(x=> x.Customer)
...

第一个查询运行了大约 2 分钟,第二个查询运行了几毫秒。

对我来说这看起来像是一个黑客,但确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.