Dapper动态参数在不使用匿名对象时抛出SQLException"必须定义标量变量"

sh-*_*eta 25 c# sqlexception dapper

(此代码在C#中使用Dapper Dot Net)

此代码有效:

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

此代码抛出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);
Run Code Online (Sandbox Code Playgroud)

System.Data.SqlClient.SqlException:必须声明标量变量"@Priority".

为什么?

kev*_*ner 34

使用属性而非字段实现模型:

class MyAccount 
{
    public string Name { get; set; }
    public int Priority { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Dapper查看对象的属性以获取参数,忽略字段.匿名类型起作用,因为它们是使用属性实现的.

  • @MarcGravell似乎确实违反了最少惊喜的原则.我会投票改变行为或记录要求. (2认同)