并非总是可以在单个对象/调用中整齐地打包所有参数。为了帮助处理更复杂的场景,dapper允许param参数是IDynamicParameters实例。如果您这样做,您的自定义AddParameters方法将在适当的时间被调用,并将命令交给附加到。但是,在大多数情况下,使用预先存在的DynamicParameters类型就足够了:
var p = new DynamicParameters(new { a = 1, b = 2 }); p.Add("c", dbType: DbType.Int32, direction: ParameterDirection.Output); connection.Execute(@"set @c = @a + @b", p); int updatedValue = p.Get<int>("@c");
由此可见:
(可选)现有对象的填充
(可选)动态添加其他参数
将参数传递给命令
命令完成后检索任何更新的值
需要注意的是,由于RDBMS如何工作的协议,它通常是唯一可靠的获得更新的参数值之后的任何数据(从一个Query或QueryMultiple`操作)已被完全消耗(例如,SQL Server上,更新后的参数值是在结束的TDS流)。