Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 如何使用ExecuteSqlInterpolatedAsync()利用EF Core 3.0中的输出参数_C#_Entity Framework_Asp.net Core - Fatal编程技术网

C# 如何使用ExecuteSqlInterpolatedAsync()利用EF Core 3.0中的输出参数

C# 如何使用ExecuteSqlInterpolatedAsync()利用EF Core 3.0中的输出参数,c#,entity-framework,asp.net-core,C#,Entity Framework,Asp.net Core,。我将.Net Core 3.0与EF Core 3.0一起使用,并试图从存储过程中获取一个输出参数。代码如下: var output="" await _context.Database.ExecuteSqlInterpolatedAsync( $"EXEC dbo.InsertTest @param1={"test"},@param2={"test2"}, @param3={output}); 我不知道的是如何构造3.1中的新api来指定输出参数。我想知道是否有人对此有任何文档,或者在新的

。我将.Net Core 3.0与EF Core 3.0一起使用,并试图从存储过程中获取一个输出参数。代码如下:

var output=""
await _context.Database.ExecuteSqlInterpolatedAsync(
$"EXEC dbo.InsertTest @param1={"test"},@param2={"test2"}, @param3={output});
我不知道的是如何构造3.1中的新api来指定输出参数。我想知道是否有人对此有任何文档,或者在新的更新中做过这件事


提前谢谢

Direction
设置为
Output
时,创建
param3
为/
SqlParameter
的可能性很小:

var output = new SqlParameter("@param3", DbType.String)
    { Direction = ParameterDirection.Output };
await _context.Database.ExecuteSqlInterpolatedAsync(
    $"EXEC dbo.InsertTest @param1={"test"},@param2={"test2"}, @param3={output}");
Console.WriteLine(output.Value);
但我不确定,从我可以看到的,并不能检查它现在与实际的数据库


因此,在最坏的情况下,您只需删除ExecuteSqlInterpolatedAsync,并使用一些标准方法来执行支持输出参数的存储过程-

,这要感谢Eugene让我走上正确的道路。如果有人遇到同样的问题:

要在3.0中成功获取输出参数,必须将输出参数明确定义为SqlParameter(),然后在变量后面包含单词“OUT”

这是一个使用ExecuteSqlInterpolated()的示例

这是一个使用ExecuteSqlRawAsync()的示例


你说的输出是什么意思?在您的代码中,似乎您试图插入一些内容?@rasti:这意味着
@param3
是一个输出参数。很抱歉,我没有注意到这一点,您得到了什么?为什么使用await我之所以使用await,是因为我获取了输出参数并使用它进行另一个方法调用@这是正确的。这意味着param3是一个输出参数。在过去,我会使用类似的东西,我只是尝试用新的“ExecuteSQLImproted”复制它:wait_context.Database.ExecuteSqlCommandAsync(“dbo.InsertTest param1,param2,param3 OUT”,参数:new[]{param1,param2,output});尤金,这是我开始走的路线。我用几种不同的方法测试了它。。。作为sqlParameter、字符串、int等。。。SqlParameter是唯一有效的选项。然而,需要注意的是,为了得到任何东西,还需要在变量后面包含单词“OUT”。正如我在后续文章中所指出的,这两个项目的结合是阻碍我前进的原因。以什么方式?在那篇文章发表的时候,这些例子工作得非常完美。你的“引号”并没有在“test”和“test2”之间转义,所以我怀疑它们是否像这里显示的那样工作过。发布或编辑时是否丢失了一些格式?例如,我使用了_context.Database.ExecuteSqlInterpolated($”EXECUTE[dbo].[SP_Something]@ParamA='fixed value',@ParamB={model.SomeValue}”);可能是我在将答案转换为堆栈溢出时输入错误。我已更新了答案。我还注意到我在“结束后”中丢失了一个结束符。
var output = new SqlParameter();
output.ParameterName = "@ID";
output.SqlDbType = SqlDbType.Int;
output.Direction = ParameterDirection.Output;

await _context.Database.ExecuteSqlInterpolated(
"EXEC dbo.InsertTest @param1={'test'},@param2={'test2'}, @param3={output} OUT");
var output = new SqlParameter();
output.ParameterName = "@ID";
output.SqlDbType = SqlDbType.Int;
output.Direction = ParameterDirection.Output;

await _context.Database.ExecuteSqlRawAsync(
"EXEC dbo.InsertTest @param1={0},@param2={1}, @param3={3} OUT", param1,param2,output);