基本参数化 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 使用命令文本来确定要添加的对象的哪些成员 - 它通常不会添加不必要的东西,例如 Description
,IsActive
,CreationDate
,因为我们发出的命令显然不涉及它们 - 尽管有时会出现这种情况可能会这样做,例如,如果你的命令包含:
// TODO - removed for now; include the @Description in the insert
它并不试图弄清楚以上只是一个评论。
存储过程
存储过程的参数完全相同,除了 dapper 无法确定应该/不应该包含的内容 - 可用的所有内容都被视为参数。因此,通常首选匿名类型:
connection.Execute("KeyLookupInsert", new { id, name },
commandType: CommandType.StoredProcedure);