3

Ich versuche, den folgenden Befehl in einer ASP.Net Core App auszuführen.Fehler beim Versuch, gespeicherte Aktualisierungsprozedur mit Entity Framework Core auszuführen

await _context.Database.ExecuteSqlCommandAsync(
      "EXEC AdmissionConsultEndCurrentAndPending @PracticeId @UserId @AdmissionId", 
      parameters: new[] { AdmissionId, assignments.UserId, assignments.PracticeId }); 

Ich habe den eigentlichen Befehl mit diesen Kombinationen versucht, so gut

EXEC AdmissionConsultEndCurrentAndPending @PracticeId, @UserId, @AdmissionId 
AdmissionConsultEndCurrentAndPending, @PracticeId, @UserId, @AdmissionId 

Die drei Werte, die vergangen sind, sind drei ganze Zahlen. Für den Fall, zählt es hier ist die gespeicherte Prozedur

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 

Wenn ich laufe dies obwohl ich die folgende Fehlermeldung: No mapping to a relational type can be found for the CLR type 'Int32[]'.

Ich bin nicht sicher, ob diese Fehler auf den int-Wert beziehen ich vorbei als Parameter oder vielleicht, da es eine Aktualisierungsabfrage ist, versucht es, einen Int-Wert für die Anzahl der betroffenen Zeilen zurückzugeben. Wie auch immer, ich muss es noch funktionieren lassen.

+0

Haben Sie Kommas müssen Params trennen? – JamieD77

+0

Ich hatte sie ursprünglich und nahm sie heraus, um zu versuchen, nachzuahmen, wie Sie es in SQL ausführen würden. – Jhorra

+0

Ich werde ein paar Kombinationen davon versuchen. – Jhorra

Antwort

4

Hier ist eine Methode, die Ihre Anforderungen erfüllen sollte:

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()); 
+0

Eine kleine Änderung, die zu Ihrer Antwort benötigt wird, müssen Sie ein Komma zwischen den übergebenen Parametern in Ihrem Befehl setzen. – Jhorra

+0

Natürlich. Fehler kopieren und einfügen (meins, nicht deins). Es ist jetzt behoben. – STLDeveloper

1

Basierend auf den Kommentaren fand ich, dass das Problem war, dass ich die Werte direkt übergab, und ich musste einen Parameter übergeben, und nicht das int selbst. Also, was funktioniert hat, war dies:

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 }); 
Verwandte Themen