Führen Sie die gespeicherte Prozedur in EF Core 3.0 vs 2.2 aus

8

Ich versuche, meinen Code zu aktualisieren, um Änderungen in EF Core 3.0 Rechnung zu tragen, insbesondere die Ablehnung von ExecuteSqlCommand.

Der folgende Code funktionierte in 2.2, aber wie gesagt, ich muss loswerden 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);

Ich habe versucht, den Aufruf in zu ändern ExecuteSqlRaw(wobei alles andere identisch bleibt), aber das löst, obwohl es kompiliert wird, zur Laufzeit die folgende Ausnahme aus:

Die SqlParameterCollection akzeptiert nur Objekte vom Typ SqlParameter, nicht SqlParameter

Ich habe mit dem Debugger nachgefragt und keiner von ihnen SqlParameterist null. Ich vermute, dass mein Anruf bei ExecuteSqlRawnicht richtig formatiert ist, aber ich kann keine anderen Beispiele finden, als Anrufe in Linq-Abfragen zu integrieren, die ich nicht tun muss. Ich möchte nur den Aufruf der gespeicherten Prozedur auslösen und mir den Ausgabeparameter ansehen, wenn er fertig ist.

Steven Frank
quelle

Antworten:

10

Dies ist höchstwahrscheinlich auf den Wechsel zu Microsoft.Data.SqlClient zurückzuführen .

Entfernen Sie den Verweis auf die Assembly System.Data.SqlClient und ersetzen Sie die Namespaces.

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

Engel Yordanov
quelle
Scheint perfekt zu funktionieren, danke!
Steven Frank