Dapper是否使用编号参数,例如Massive

时间:2013-04-14 17:10:01

标签: sql-server dapper massive

Dapper是否使用编号参数,如Massive(@ 0,@ 1,...),与命名(@ a,@ b,...)不同?

有必要创建一个查询

//select @0 as val union select @1 union select @2 union select @3 union select @4 
//union select @5 union select @6 union select @7 union select @8 union select @9
var sb = new StringBuilder("select @0 as val");
for (int i = 1; i < 10; i++)
{
    sb.AppendFormat(" union select @{0}", i);
}
var query = sb.ToString();
//---Dapper = fail
var db = Connection;
var list = db.Query(query, param: new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
//---Massive = ok
var db2 = new Massive.DynamicModel(coins);
var list2 = db2.Query(query, args: new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });

Dapper问题的解决方案是什么?

1 个答案:

答案 0 :(得分:3)

Massive在查询中使用位置参数,但是dapper使用命名参数。因此,在大量的情况下,您可以传递参数数组,例如:new int[] {1,2,3},而在dapper中,您需要传递参数对象,如new { a = 1, b = 2 }

要使用dapper实现类似的解决方案,您可以创建一个DynamicParameters对象,您可以在其中传递参数字典,其中键是参数的名称,value是参数的值,类似于{{1}等等

您可以使用LINQ轻松地将数组转换为字典:

{"0",0}, {"1", 1},