Sto cercando di eseguire il seguente comando in un'app di ASP.Net Core.
await _context.Database.ExecuteSqlCommandAsync(
"EXEC AdmissionConsultEndCurrentAndPending @PracticeId @UserId @AdmissionId",
parameters: new[] { AdmissionId, assignments.UserId, assignments.PracticeId });
Ho provato anche il comando reale con queste combinazioni
EXEC AdmissionConsultEndCurrentAndPending @PracticeId, @UserId, @AdmissionId
AdmissionConsultEndCurrentAndPending, @PracticeId, @UserId, @AdmissionId
I tre valori che vengono passati sono tre interi. Nel caso qui importa è il proc memorizzato
ALTER PROCEDURE [dbo].[AdmissionConsultEndCurrentAndPending]
@AdmissionId INT,
@UserId INT,
@PracticeId INT
AS
BEGIN
SET NOCOUNT ON;
UPDATE
AdmissionConsults
SET
CurrentConsult = 0
WHERE
AdmissionId = @AdmissionId AND
PracticeId = @PracticeId AND
CurrentConsult = 1
END
Quando lo eseguo, tuttavia, viene visualizzato il seguente errore: No mapping to a relational type can be found for the CLR type 'Int32[]'.
Non sono sicuro se questo errore si riferisca ai valori int che sto passando come parametri o forse poiché si tratta di una query di aggiornamento, sta tentando di restituire un valore int per il numero di righe interessate. In ogni caso, devo ancora farlo funzionare.
Ecco un metodo che dovrebbe soddisfare le tue esigenze:
var parameters = new List<SqlParameter>
{
new SqlParameter("@PracticeId", assignmentsPracticeId),
new SqlParameter("@UserId", assignmentsUserId),
new SqlParameter("@AdmissionId", AdmissionId)
};
await _context.Database.ExecuteSqlCommandAsync(
"EXEC AdmissionConsultEndCurrentAndPending @PracticeId, @UserId, @AdmissionId",
parameters.ToArray());
Sulla base dei commenti ho scoperto che il problema era che stavo passando i valori direttamente, e avevo bisogno di passare un parametro, e non l'int stesso. Quindi, ciò che ha funzionato è stato questo:
SqlParameter u = new SqlParameter("@UserId", assignments.UserId);
SqlParameter a = new SqlParameter("@AdmissionId", AdmissionId);
SqlParameter pr = new SqlParameter("@PracticeId", assignments.PracticeId);
await _context.Database.ExecuteSqlCommandAsync("EXEC AdmissionConsultEndCurrentAndPending @PracticeId, @UserId, @AdmissionId",
parameters: new[] { a, u, pr });