Ejecutar procedimiento almacenado en EF Core 3.0 vs 2.2

8

Estoy tratando de actualizar mi código para acomodar los cambios en EF Core 3.0, específicamente el desuso de ExecuteSqlCommand.

El siguiente código funcionaba en 2.2 pero, como se indicó, necesito deshacerme de él 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);

Intenté cambiar la llamada a ExecuteSqlRaw(dejando todo lo demás idéntico) pero eso, aunque se compila, arroja la siguiente excepción en tiempo de ejecución:

SqlParameterCollection solo acepta objetos de tipo SqlParameter no nulos, no objetos SqlParameter

Lo he comprobado con el depurador y ninguno de ellos SqlParameteres nulo. Sospecho que mi llamada a ExecuteSqlRawno está formateada correctamente, pero no puedo encontrar ningún ejemplo que no sea integrar llamadas en consultas de Linq que no necesito hacer. Solo quiero disparar la llamada al procedimiento almacenado y echar un vistazo al parámetro de salida cuando esté listo.

Steven Frank
fuente

Respuestas:

10

Esto probablemente se deba al cambio a Microsoft.Data.SqlClient .

Elimine la referencia al ensamblado System.Data.SqlClient y reemplace los espacios de nombres.

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

Angel Yordanov
fuente
Parece funcionar perfectamente, gracias!
Steven Frank