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合法嗎? 是的,了解原因