J'utilise actuellement Entity Framework pour mon accès à la base de données, mais je souhaite jeter un coup d'œil à Dapper. J'ai des cours comme celui-ci:
public class Course{
public string Title{get;set;}
public IList<Location> Locations {get;set;}
...
}
public class Location{
public string Name {get;set;}
...
}
Un cours peut donc être enseigné à plusieurs endroits. Entity Framework fait le mappage pour moi afin que mon objet Course soit rempli avec une liste d'emplacements. Comment procéder avec Dapper, est-ce possible ou dois-je le faire en plusieurs étapes de requête?
Réponses:
Dapper n'est pas un ORM à part entière, il ne gère pas la génération magique de requêtes et autres.
Pour votre exemple particulier, ce qui suit fonctionnerait probablement:
Prenez les cours:
Prenez la cartographie appropriée:
Saisissez les emplacements pertinents
Cartographiez tout
En laissant cela au lecteur, vous créez quelques cartes et parcourez vos parcours en remplissant les emplacements.
Attention, l'
in
astuce fonctionnera si vous avez moins de 2100 recherches (Sql Server), si vous en avez plus, vous voudrez probablement modifier la requête pourselect * from CourseLocations where CourseId in (select Id from Courses ... )
si tel est le cas, vous pouvez également extraire tous les résultats en une seule fois en utilisantQueryMultiple
la source
Vous pouvez également utiliser une requête avec une recherche:
Voir ici https://www.tritac.com/blog/dappernet-by-example/
la source
Pas besoin de
lookup
dictionnairela source
Je sais que je suis vraiment en retard, mais il y a une autre option. Vous pouvez utiliser QueryMultiple ici. Quelque chose comme ça:
la source
Désolé d'être en retard à la fête (comme toujours). Pour moi, il est plus facile d'utiliser un
Dictionary
, comme l'a fait Jeroen K , en termes de performances et de lisibilité. De plus, pour éviter la multiplication des en-têtes entre les emplacements , j'utiliseDistinct()
pour supprimer les doublons potentiels:la source
Quelque chose manque. Si vous ne spécifiez pas chaque champ
Locations
dans la requête SQL, l'objetLocation
ne peut pas être rempli. Regarde:En utilisant
l.*
dans la requête, j'avais la liste des emplacements mais sans données.la source
Je ne sais pas si quelqu'un en a besoin, mais j'en ai une version dynamique sans modèle pour un codage rapide et flexible.
la source