variable scalaire et instruction de suppression simple

.net c# dapper

Question

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.

Réponse acceptée

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

Réponse populaire

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi