Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySql上的实体框架核心调用FromSqlInterpolated并返回实体列表_C#_Mysql_Asp.net Core_Entity Framework Core_Pomelo Entityframeworkcore Mysql - Fatal编程技术网

C# MySql上的实体框架核心调用FromSqlInterpolated并返回实体列表

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将输出我要捕获的实体的结果集,当我尝试此操作时:

我正在实体框架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将输出我要捕获的实体的结果集,当我尝试此操作时:

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。我看到了很好的效果。