C# MySql上的实体框架核心调用FromSqlInterpolated并返回实体列表
我正在实体框架Core 5.0.3的ASP核心项目中使用C#,并使用Pomelo EntityFrameworkCore for MySql 我可以通过以下方法调用standard SP:C# MySql上的实体框架核心调用FromSqlInterpolated并返回实体列表,c#,mysql,asp.net-core,entity-framework-core,pomelo-entityframeworkcore-mysql,C#,Mysql,Asp.net Core,Entity Framework Core,Pomelo Entityframeworkcore Mysql,我正在实体框架Core 5.0.3的ASP核心项目中使用C#,并使用Pomelo EntityFrameworkCore for MySql 我可以通过以下方法调用standard SP: int recordCount = await context.Database.ExecuteSqlInterpolatedAsync($"call `SP_ON_MYSQL` ({param1}, {param2}"); 有问题的SP将输出我要捕获的实体的结果集,当我尝试此操作时:
int recordCount = await context.Database.ExecuteSqlInterpolatedAsync($"call `SP_ON_MYSQL` ({param1}, {param2}");
有问题的SP将输出我要捕获的实体的结果集,当我尝试此操作时:
var qry = await context.ENITY.FromSqlInterpolated($"call `SP_ON_MYSQL` ({param1}, {param2})").SingleOrDefaultAsync();
我得到以下错误:
*“FromSqlRaw”或“FromSqlInterpolated”是使用不可组合的SQL调用的,并在其上组合查询
提前感谢您提供的任何帮助。
考虑在方法之后调用“可枚举”以在客户端执行组合。*
我已经看过使用SQL Server的示例,因此请不要将其标记为已回答,除非您可以向我展示一个非SQL Server特定的示例。尝试以下方法:
var qry = await context.ENITY
.FromSqlInterpolated($"call `SP_ON_MYSQL` ({param1}, {param2})")
.ToListAsync()
.SingleOrDefault();
@Torvin的答案是正确的 如果要从存储过程进行查询,则需要在调用
SingleOrDefault()
之前添加一个AsEnumerable()
,ToList()
等调用。
有关更多信息,请参见官方EF核心回购协议
下面是一个完全工作的控制台程序,演示了该方法:
使用系统诊断;
使用System.Linq;
使用Microsoft.EntityFrameworkCore;
使用Microsoft.Extensions.Logging;
使用Pomelo.EntityFrameworkCore.MySql.Infrastructure;
命名空间IssueConsoleTemplate
{
公共密封类冰淇淋
{
public int IceCreamId{get;set;}
公共字符串名称{get;set;}
}
公共类上下文:DbContext
{
公共DbSet冰淇淋{get;set;}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
选项生成器
.UseMySql(
“服务器=127.0.0.1;端口=3306;用户=root;密码=;数据库=So67040870”,
b=>b.ServerVersion(“8.0.21-mysql”)
.CharSetBehavior(CharSetBehavior.NeverAppend))
.UseLoggerFactory(
LoggerFactory,创建(
b=>b
.AddConsole()
.AddFilter(level=>level>=LogLevel.Information)))
.EnableSensitiveDataLogging()
.EnableDetailedErrors();
}
}
内部课程计划
{
私有静态void Main()
{
使用var context=newcontext();
设置数据库(上下文);
var iceCreamId=1;
var searchContacts=context.IceCreams
.FromSqlInterpolated($“调用`GetIceCreams`({iceCreamId})”)
.AsEnumerable()//谢谢lauxjpn。奇怪的是,框架需要先调用ToList。我看到了很好的效果。