Comment carte pour un Dictionnaire de l'objet à partir de résultats de base de données à l'aide de Dapper Dot Net?
Si j'ai une simple requête telle que:
string sql = "SELECT UniqueString, ID FROM Table";
et je veux le faire correspondre à un dictionnaire d'objets tels que:
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
Comment pourrais-je faire cela avec Dapper?
Je suppose que c'est quelque chose comme:
myDictionary = conn.Query<string, int>(sql, new { }).ToDictionary();
Mais ne peut pas trouver la bonne syntaxe.
Vous devez vous connecter pour publier un commentaire.
Il y a diverses façons déjà montré; personnellement, je venais d'utiliser la non-api générique:
Fonctionne aussi sans une classe supplémentaire:
NOTE: Lors de l'utilisation de Dapper.NET version 3.5, la méthode de Requête qui prend la première, la deuxième et types de retour vous demande de spécifier plusieurs paramètres, comme la .NET 4.0 et .NET 4.5 versions profiter de les arguments optionnels.
Dans ce cas, le code suivant devrait fonctionner:
La plupart des arguments reviennent à un défaut, mais
splitOn
est nécessaire, car il sera autrement par défaut à une valeur de "id".Pour une requête qui retourne deux colonnes, 'ID " et " Description',
splitOn
doit être mis à " Description'.Vous pouvez utiliser des alias et fortes.
Les alias sont les points clés qui correspondent aux attributs de KeyValuePair type de Clé et la Valeur.
Il fonctionne sous typage fort et fonctionne bien.
Je n'aime pas le type dynamique. Il conduit à la catastrophe dans certaines situations. En outre, le boxing et unboxing apporte la perte de performances.
Je ne suis pas sûr si ce que vous essayez de faire est possible. Si vous définissez une classe à la carte la requête devient beaucoup plus trivial:
Ensuite, vous faites juste cela:
Dapper a aussi une méthode d'extension pour
ExecuteReader
. Donc, vous pourriez aussi le faire:Cette approche fonctionne sans connaître les noms de colonne. En outre, si vous ne connaissez pas les types de données, vous pouvez modifier
Dictionary<string,int>
àDictionary<string,object>
etGetInt32(i)
àGetValue(i)
.Si vous utilisez > .net de 4,7 ou netstandard2 vous pouvez utiliser la valeur des n-uplets. le code est agréable et laconique, et il n'y a pas de dynamique.