Duplication possible:
Comment sélectionner un objet agrégé efficacement avec Dapper?
est-il possible d'obtenir dapper pour instancier des objets imbriqués, et si oui, y a-t-il des exemples de cela en action?
Dans la plupart des cas, les primitives .net me suffisent, mais pas toujours. Un hack pourrait consister à inclure la clé étrangère comme primitive dans le type parent, puis à l'instancier par la suite. J'espère que ce n'est pas nécessaire car cela créerait un bruit indésirable dans le modèle POCO.
Je pense que l’aide que je propose ici: Multi-Mapper pour créer une hiérarchie d’objets peut être utile.
var mapped = cnn.QueryMultiple(sql)
.Map<A,B,A>
(
A => A.ID,
B => B.AID,
a, bees => { A.Items = bees};
);
En supposant que vous étendez votre GridReader et avec un mappeur:
public static IEnumerable<TFirst> Map<TFirst, TSecond, TKey>
(
this GridReader reader,
Func<TFirst, TKey> firstKey,
Func<TSecond, TKey> secondKey,
Action<TFirst, IEnumerable<TSecond>> addChildren
)
{
var first = reader.Read<TFirst>().ToList();
var childMap = reader
.Read<TSecond>()
.GroupBy(s => secondKey(s))
.ToDictionary(g => g.Key, g => g.AsEnumerable());
foreach (var item in first)
{
IEnumerable<TSecond> children;
if(childMap.TryGetValue(firstKey(item), out children))
{
addChildren(item,children);
}
}
return first;
}
Vous pouvez étendre ce modèle pour travailler avec une hiérarchie à 3 niveaux.