基本参数化 SQL

Dapper 可以通过完全参数化的 SQL 轻松地遵循最佳实践。

鲍比表

参数很重要,所以 dapper 可以很容易地使它正确。你只需以正常方式为你的 RDBMS(通常是 @foo?foo:foo)表达你的参数,并为 dapper 提供一个具有名为 foo 的成员的对象。最常见的方法是使用匿名类型:

int id = 123;
string name = "abc";
connection.Execute("insert [KeyLookup](Id, Name) values(@id, @name)",
    new { id, name });

而且……就是这样。Dapper 将添加所需的参数,一切都应该工作。

使用对象模型

你还可以将现有对象模型用作参数:

KeyLookup lookup = ... // some existing instance
connection.Execute("insert [KeyLookup](Id, Name) values(@Id, @Name)", lookup);

Dapper 使用命令文本来确定要添加的对象的哪些成员 - 它通常不会添加不必要的东西,例如 DescriptionIsActiveCreationDate,因为我们发出的命令显然不涉及它们 - 尽管有时会出现这种情况可能会这样做,例如,如果你的命令包含:

// TODO - removed for now; include the @Description in the insert

它并不试图弄清楚以上只是一个评论。

存储过程

存储过程的参数完全相同,除了 dapper 无法确定应该/不应该包含的内容 - 可用的所有内容都被视为参数。因此,通常首选匿名类型:

connection.Execute("KeyLookupInsert", new { id, name },
    commandType: CommandType.StoredProcedure);