【发布时间】:2021-10-24 19:53:19
【问题描述】:
我的问题非常非常很简单,但我无法通过使用 ASP.NET Core MVC 的 EF Core 完成此操作。我只是尝试使用带有 EF 核心的原始 sql 进行查询并返回一组行。
我在我的 Postgresql 中创建了一个名为 show() 的函数(用于测试目的)
我用这段代码创建了函数:
CREATE OR REPLACE FUNCTION public.show()
RETURNS SETOF city
LANGUAGE 'plpgsql'
VOLATILE
PARALLEL UNSAFE
COST 100 ROWS 1000
AS $BODY$
BEGIN
RETURN QUERY SELECT * FROM City;
END;
$BODY$;
我的 C# 代码中有这个:
var listOfCities = _context.Database.FromSqlRaw("SELECT public.show()").ToList();
在.FromSqlRaw 部分给我错误:
“DatabaseFacade”不包含“FromSqlRaw”的定义,并且没有 可访问的扩展方法“FromSqlRaw”接受第一个参数 可以找到类型“DatabaseFacade”(您是否缺少使用 指令还是程序集引用?)
-我不想使用任何 DbContext,因为它是一个自定义查询,可以从函数返回任何对象。
- 我知道这可以通过使用 LINQ
_context.Cities.ToList()来完成,但我正在尝试测试和学习如何使用原始 sql WITH 参数和无参数的函数。
我该如何解决这个问题?这可以用 EF 内核完成吗?
【问题讨论】:
-
您有
using Microsoft.EntityFrameworkCore.Infrastructure声明吗? -
是的,但它没用,我试过这个
_context.Cities.FromSqlRaw并且没有错误,但因为Cities是来自 Context 的表,我不想使用表进行映射,只是自定义 DTO。因为我没有 DTO,所以我使用了.Database。也许我现在知道我在做什么了。
标签: c# postgresql asp.net-core .net-core plpgsql