sql - EF core 3.1 无法运行复杂的原始 sql 查询
问题描述
以下查询在 EF 核心 2 上运行良好,但 EF 核心 3 会抛出错误!我什至可以在我现在放手的 EF 核心 2 中的这个查询之后添加一些包含。
询问:
// just to have an Id
var id = Guid.NewGuid();
var resutl = Context.Parties.FromSqlInterpolated($@"WITH mainOffice AS
(SELECT * FROM Parties as o1 WHERE (Discriminator = N'Office')
AND (Id = '{id}')
UNION ALL SELECT o.* FROM Parties AS o INNER JOIN mainOffice AS m
ON m.Id = o.ParentOfficeId)
SELECT * FROM mainOffice as f").ToList();
它产生的错误如下:
FromSqlRaw 或 FromSqlInterpolated 是使用不可组合的 SQL 调用的,并使用在其上构成的查询。考虑
AsEnumerable
在 FromSqlRaw 或 FromSqlInterpolated 方法之后调用以在客户端执行组合。
了解以下信息可能会有所帮助:
- 表“Parties”是每个层次结构的表
- 我尝试从根类型 DbSet 和我感兴趣的类型运行查询
- 下界 FromSqlRaw 和 FromSqlInterpolated 都没有成功
- 添加“AsEnumerable”也无济于事
我忘了什么吗?我究竟做错了什么?“不可组合的 SQL”是什么意思?这是否意味着 EF 核心正在尝试解释查询?
解决方案
我没有答案,但我现在知道原因了。
产生此错误的原因与此问题类似: FromSql method when used with stored procedure cannot be composition
在我的情况下,无论天气与否,我都使用任何方法,因为我试图查询的表包含一些不同的类型(每个层次结构的表),我的查询将始终在选择查询中被扭曲以限制鉴别器。即使我从根编写查询,包装器选择查询也是使用所有可能的鉴别器生成的。
所以这意味着我只能运行可以作为子查询放置的查询。我的查询不能,存储过程不能...
推荐阅读
- javascript - 当通过同时查看 2 个或更多键来确定唯一性时,如何从对象数组中删除重复项
- mysql - JSON_EXTRACT 和方括号
- r - 更改 R 中数据框列中的所有值
- symfony - Symfony 4 第一个事件
- valgrind - VSTS 托管 Linux - valgrind 失败 - 没有新的代码更改
- cryptography - Nim 中的 Cryptopals 1.2:XOR 返回意外值
- python - Python CSV 解析字典和查找元素的索引
- c# - 从 IIS 中的网站重新启动和监视服务
- php - 通过表单提交更改 PHP 变量/值
- c# - 如何使用 AVCaptureVideoDataOutput 在 AVCaptureSession 中避免丢帧