Dapper動的パラメータがSQLExceptionをスローする匿名オブジェクトを使用しない場合は "スカラー変数を定義する必要があります"

c# dapper sqlexception

質問

(このコードはC#でDapper Dot Netを使用しています)

このコードは動作します:

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

このコードは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:スカラ変数 "@Priority"を宣言しなければなりません。

どうして?

受け入れられた回答

フィールドではなくプロパティでモデルを実装する:

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

Dapperはオブジェクトのプロパティを調べ、フィールドを無視してパラメータを取得します。匿名型は、プロパティで実装されているため動作します


人気のある回答

この回答はポスターの問題には関係しませんが、私はここで共有する別の修正で同様の問題を抱えていました。

私は間違ってnew []{ ... }としてパラメータリストを定義していました:

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

[]問題を解決しました:

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


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