首页 > 解决方案 > 带有 2 个参数错误 System.InvalidOperationException 的 EF Core 存储过程:

问题描述

我正在迁移到 EF Core 并尝试使用 2 个参数调用存储过程。

1 个参数的当前设置工作正常。

这是我看到的错误:

System.InvalidOperationException:FromSqlRaw 或 FromSqlInterpolated 是使用不可堆肥的 SQL 调用的,并且查询在其上进行了编写。考虑AsEnumerable在 FromSqlRaw 或 FromSqlInterpolated 方法之后调用以在客户端执行组合。在

这是我的存储库调用:

public IQueryable<PartsGridDTO> GetPartsGridQueryable(int partId, int groupId)
{
    return MoreContext.SpPartsGridDetailYourCases
                      .FromSqlRaw($"EXECUTE dbo.GetProductsByPartAndGroup {partId}, {groupId}")
                      .Select(s => new PartsGridDTO
                                   {
                                       PartId = partId,
                                       //....
                                   }).AsQueryable();
}

我从这里尝试了一些修复:

在 EF Core 3.1 中包含 FromSqlRaw 和存储过程

但这些都不起作用。

我要返回AsQueryable()到控制器,然后调用.ToListAsync().

.IgnoreQueryFilters();我之前尝试过添加.AsQueryable(),但我仍然看到错误。

有什么想法吗?我是否传递了错误的参数?是 EF Core 问题还是?

标签: entity-framework-core

解决方案


在我解决问题之前,有 3 个项目:

  1. 我有额外的属性不在存储过程的返回范围内。我想这会导致我在上面发布的错误。

  2. (一个子问题)我也只需要返回网格要显示的项目。这意味着网格可能仅显示存储过程中返回的 8 个值中的 5 个。在调用的存储过程的返回项中包含这些额外的列稍后会导致此错误:InvalidOperationException: The required column 'Address' was not present in the results of a 'FromSql' operation

  3. 这是我存储的过程代码的最终外观:

         return Context.EntityExample.FromSqlRaw($"dbo.GetProductsByPartAndGroup {partId}, {groupId}")

推荐阅读