Как использовать выходные параметры в EF Core 3.0 с помощью ExecuteSqlInterpolatedAsyn c () - PullRequest
0 голосов
/ 24 февраля 2020

У Microsoft нет текущей документации по выходным параметрам, только обычные . Я использую. Net Core 3.0 с EF Core 3.0 и пытаюсь получить выходной параметр из моей хранимой процедуры. Код следующий:

var output=""
await _context.Database.ExecuteSqlInterpolatedAsync(
$"EXEC dbo.InsertTest @param1={"test"},@param2={"test2"}, @param3={output});

Чего я не знаю, так это как структурировать новый API в 3.1 для определения выходного параметра. Мне интересно, есть ли у кого-нибудь документация по этому или сделал это в новом обновлении.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

Спасибо Евгению за то, что поставил меня на правильный путь. В случае, если кто-то сталкивается с этой же проблемой:

Чтобы успешно получить выходной параметр в 3.0, вы должны специально определить выходной параметр как SqlParameter (), а затем включить слово «OUT» после ваша переменная.

Это пример использования ExecuteSqlInterpolated ()

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);

Это пример использования ExecuteSqlRawAsyn c ()

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);
1 голос
/ 24 февраля 2020

Существует небольшая вероятность, что создание param3 как DbParameter / SqlParameter с Direction, установленным на Output, может работать:

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 и использовать какой-то стандартный способ выполнения хранимых процедур, поддерживающих выходные параметры - Entity Framework Core - Использование хранимых процедур с выходными параметрами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...