スカラー変数と単純削除ステートメント

.net c# dapper

質問

私は整数型のIDを受け取るメソッドDeleteAuthorsを持っています。私はそのテーブルからすべてのデータを削除するためにdapperを使い、BookIdはparametarとして受け取ったIDと等しいものを使いたい。

private void DeleteAuthors(int id)
{
    this.db.Query("DELETE FROM Author WHERE BookId = @id");
}

スカラー変数 "@id"を宣言しなければなりません。

だから私はこれを試した

private void DeleteAuthors(int id)
{
   this.db.Query("DELETE FROM Author WHERE BookId = @Id", new { Id = id});
}

エラーは

Dapper.dllで 'System.ArgumentException'型の未処理の例外が発生しました

追加情報:マルチマッピングAPIを使用している場合は、ID以外のキーがある場合はsplitOnパラメータを必ず設定してください

idパラメータ変数にint値が正しく設定されています。私はこれがシンプルだが、私はここで苦労していることを知っている。

受け入れられた回答

レコードを削除する場合は、 db.Execute代わりにdb.Queryを使用します。

int numDel = db.Execute("DELETE FROM Author WHERE BookId = @BookId;", new { BookId = Id }, null, null, null);

しかし、 usingステートメントを使用して、接続ができるだけ早く破棄されるようにする必要があります(エラーの場合でも)。

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

人気のある回答

@をクエリで置き換えることについて不明

しかし、次のようにも動作します:

private void DeleteAuthors(int id)
{
    this.db.Query(string.Format("DELETE FROM Author WHERE BookId = {0}",id));
}


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ