J'ai la méthode DeleteAuthors qui reçoit l'identifiant du type entier. Je souhaite utiliser dapper pour supprimer toutes les données de cette table dont BookId est égal à id reçu en paramètre.
private void DeleteAuthors(int id)
{
this.db.Query("DELETE FROM Author WHERE BookId = @id");
}
Doit déclarer la variable scalaire "@id".
Donc j'ai essayé avec ça
private void DeleteAuthors(int id)
{
this.db.Query("DELETE FROM Author WHERE BookId = @Id", new { Id = id});
}
et l'erreur est
Une exception non gérée de type 'System.ArgumentException' s'est produite dans Dapper.dll
Informations supplémentaires: Lorsque vous utilisez les API de mappage multiple, assurez-vous de définir le paramètre splitOn si vous avez des clés autres que Id
La variable id parametar est correctement renseignée avec int value. Je sais que c'est simple mais je me bats ici.
Utilisez db.Execute
au lieu de db.Query
si vous souhaitez supprimer des enregistrements:
int numDel = db.Execute("DELETE FROM Author WHERE BookId = @BookId;", new { BookId = Id }, null, null, null);
Mais vous devez utiliser l'instruction using
pour vous assurer que la connexion est éliminée / fermée dès que possible (même en cas d'erreur):
int numDel = 0;
using (SqlConnection db = new SqlConnection("ConnectionString"))
{
db.Open();
numDel = db.Execute("DELETE FROM Author WHERE BookId = @BookId;", new { BookId = Id }, null, null, null);
}
pas sûr de remplacer @ dans la requête
mais la suite travaillera également:
private void DeleteAuthors(int id)
{
this.db.Query(string.Format("DELETE FROM Author WHERE BookId = {0}",id));
}