Dapper dynamische Parameter werfen eine SQLException "muss skalare Variable definieren", wenn keine anonymen Objekte verwendet werden

c# dapper sqlexception

Frage

(Dieser Code verwendet Dapper Net in C #)

Dieser Code funktioniert:

var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name";
connection_.Execute(command, new { Name = "myname", Priority = 10 } );

Dieser Code löst eine SqlException aus:

class MyAccount 
{
    public string Name;
    public int Priority;
}

var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name";
var acct = new MyAccount { Name = "helloworld", Priority = 10 };
connection_.Execute(command, acct);

System.Data.SqlClient.SqlException: Muss die Skalarvariable "@Priority" deklarieren.

Warum?

Akzeptierte Antwort

Implementieren Sie Ihr Modell mit Eigenschaften, nicht mit Feldern:

class MyAccount 
{
    public string Name { get; set; }
    public int Priority { get; set; }
}

Dapper betrachtet die Eigenschaften des Objekts, um Parameter zu erhalten, Felder zu ignorieren. Anonyme Typen funktionieren, weil sie mit Eigenschaften implementiert sind .


Beliebte Antwort

Obwohl sich diese Antwort nicht auf das Problem des Posters bezieht, hatte ich ein ähnliches Problem mit einem anderen Fix, den ich hier teilen werde.

Ich habe die Parameterliste falsch als ein new []{ ... } :

var name = "myName";
var priority = 1;
var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name";
connection_.Execute(command, new []{ priority, name });

Das Löschen des [] löste mein Problem:

connection_.Execute(command, new { priority, name });


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum