Выполнить хранимую процедуру в EF Core 3.0 против 2.2 - PullRequest
8 голосов
/ 09 января 2020

Я пытаюсь обновить свой код, чтобы учесть изменения в EF Core 3.0, в частности, устарел ExecuteSqlCommand.

Следующий код работал в 2.2, но, как указано, мне нужно избавиться от ExecuteSqlCommand:

SqlParameter srcid = new SqlParameter("@srcCharacterId", participantApplication.CharacterId);
SqlParameter newid = new SqlParameter("@newCharacterId", newCharacterId);
SqlParameter pResult = new SqlParameter
{
    ParameterName = "@pResult",
    SqlDbType = System.Data.SqlDbType.Bit,
    Direction = System.Data.ParameterDirection.Output
};

_db.Database.ExecuteSqlCommand("pCharacterCopy @srcCharacterId, @newCharacterId, @pResult OUTPUT", srcid, newid, pResult);

Я попытался изменить вызов на ExecuteSqlRaw (оставив все остальное идентичным), но, хотя он компилируется, выдает следующее исключение во время выполнения:

SqlParameterCollection принимает только ненулевые объекты типа SqlParameter, а не объекты SqlParameter

Я проверил с помощью отладчика, и ни один из SqlParameter не является нулевым. Я подозреваю, что мой вызов ExecuteSqlRaw не отформатирован правильно, но я не могу найти никаких примеров, кроме интеграции вызовов в запросы Linq, которые мне не нужны. Я просто хочу отключить вызов хранимой процедуры и взглянуть на выходной параметр, когда это будет сделано.

1 Ответ

10 голосов
/ 09 января 2020

Это, скорее всего, связано с переключением на Microsoft.Data.SqlClient .

Удалите ссылку на сборку System.Data.SqlClient и замените пространства имен.

using System.Data.SqlClient; => using Microsoft.Data.SqlClient;

...