FromSqlRaw 在 .net 6 中对我不起作用。“FromSqlRaw”或“FromSqlInterpolated”是使用不可组合的 SQL 调用的,并在其上编写查询

FromSqlRaw not working for me in .net 6. 'FromSqlRaw' or 'FromSqlInterpolated' was called with non-composable SQL and with a query composing over it

提问人:mohammad SLM 提问时间:8/15/2023 最后编辑:Robert Cutajarmohammad SLM 更新时间:8/17/2023 访问量:180

问:

我有一个在 .Net 3 上工作的查询。升级到 .Net 6 后,它不再起作用了。我在 SQL 中测试了查询,它正在工作,但我无法转换为 Linq - 它给了我这个异常:

“FromSqlRaw”或“FromSqlInterpolated”是使用不可组合的 SQL 调用的,并在其上编写查询。 请考虑在方法后调用“AsEnumerable”以在客户端执行组合。

string sqlCheckAllParents = @";WITH cte AS 
(
    SELECT Id, ParentId, Published, IsDeleted 
    FROM Comments h 
    WHERE Id = {0} 
    UNION ALL
    SELECT p.Id, p.ParentId, p.Published, p.IsDeleted 
    FROM
        Comments p 
        INNER JOIN
            cte c ON c.parentId = p.Id 
)
select Id from cte m where IsDeleted = 1 or Published = 0";

            var dontAllowLoadData = await _comments.FromSqlRaw(sqlCheckAllParents, parentId ?? 0).Select(x => x.Id).ToListAsync().ConfigureAwait(false);
            if (dontAllowLoadData.Any())
            {
                return new DataGridViewModel<Comment>
                {
                    Records = new List<Comment>(),
                    TotalCount = 0
                };
            }

数据库提供程序:(Microsoft.EntityFrameworkCore.SqlServer) 目标框架:(.NET 6.0)Target framework: (.NET 6.0)

打电话并不能解决问题。.AsEnumerable()

SQL asp.net net-6.0

评论

0赞 Guru Stron 8/15/2023
我想知道它以前是如何工作的,我认为“SQL查询必须返回实体类型的所有属性的数据”的限制一直存在。虽然 .NET Core 3 是很久以前的事了。
0赞 mohammad SLM 8/15/2023
我不知道最后一个写这些的人不可用,我正在尝试再次制作这项工作
0赞 Guru Stron 8/15/2023
将 EF Core 更新到第 7 版并使用 .context.Database.SqlQuery<int>(query).ToListAsync()

答: 暂无答案