Dapper utilise-t-il des paramètres numérotés tels que Massive

dapper massive sql-server

Question

Dapper utilise-t-il des paramètres numérotés tels que Massive (@ 0, @ 1, ...) contrairement à ce qui est nommé (@a, @b, ...)?

Il est nécessaire de créer une requête comme

//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 });

Quelles sont les solutions au problème pour Dapper?

Réponse acceptée

Massive utilise des arguments positionnels dans ses requêtes, mais Dapper utilise des arguments nommés. Donc, en masse, vous pouvez passer des tableaux de paramètres comme: new int[] {1,2,3} alors que dans dapper vous devez passer des objets de paramètres comme new { a = 1, b = 2 } .

Pour obtenir une solution similaire avec dapper, vous pouvez créer un objet DynamicParameters lequel vous pouvez passer votre dictionnaire de paramètres où la clé est le nom du paramètre et value la valeur du paramètre, quelque chose comme {"0",0}, {"1", 1}, etc.

Vous pouvez facilement transformer un tableau en dictionnaire avec LINQ:

var dictionary = new object[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    .Select((item, ind) => new {ind = ind.ToString(), item})
    .ToDictionary(item => item.ind, item => item.item);

DynamicParameters p = new DynamicParameters(dictionary);

var list = db.Query(query, param: p);



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi