(Ce code utilise Dapper Dot Net en C #)
Ce code fonctionne:
var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name";
connection_.Execute(command, new { Name = "myname", Priority = 10 } );
Ce code déclenche une exception SqlException:
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: Doit déclarer la variable scalaire "@Priority".
Pourquoi?
Implémentez votre modèle avec des propriétés, pas des champs:
class MyAccount
{
public string Name { get; set; }
public int Priority { get; set; }
}
Dapper examine les propriétés de l'objet pour obtenir des paramètres, en ignorant les champs. Les types anonymes fonctionnent car ils sont implémentés avec des propriétés .
Bien que cette réponse ne concerne pas le problème de l'affiche, j'ai eu un problème similaire avec un correctif différent que je partagerai ici.
Je ne définissais pas correctement la liste de paramètres comme un new []{ ... }
:
var name = "myName";
var priority = 1;
var command = "UPDATE account SET priority_id = @Priority WHERE name = @Name";
connection_.Execute(command, new []{ priority, name });
Lâcher le []
résolu mon problème:
connection_.Execute(command, new { priority, name });