(此代碼在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 });