Ich verwende derzeit Entity Framework für meinen Datenbankzugriff, möchte aber einen Blick auf Dapper werfen. Ich habe Klassen wie diese:
public class Course{
public string Title{get;set;}
public IList<Location> Locations {get;set;}
...
}
public class Location{
public string Name {get;set;}
...
}
Ein Kurs kann also an mehreren Orten unterrichtet werden. Entity Framework übernimmt die Zuordnung für mich, sodass mein Kursobjekt mit einer Liste von Speicherorten gefüllt wird. Wie würde ich mit Dapper vorgehen, ist das überhaupt möglich oder muss ich es in mehreren Abfrageschritten tun?
Antworten:
Dapper ist kein ausgewachsener ORM, der keine magische Generierung von Abfragen und dergleichen verarbeitet.
Für Ihr spezielles Beispiel würde wahrscheinlich Folgendes funktionieren:
Schnapp dir die Kurse:
Holen Sie sich das entsprechende Mapping:
Besorgen Sie sich die relevanten Orte
Ordnen Sie alles zu
Überlassen Sie dies dem Leser, erstellen Sie einige Karten und durchlaufen Sie Ihre Kurse, die mit den Standorten gefüllt sind.
Vorsichtsmaßnahme Der
in
Trick funktioniert, wenn Sie weniger als 2100 Suchvorgänge (SQL Server) haben. Wenn Sie mehr haben, möchten Sie die Abfrage wahrscheinlich dahingehend ändern,select * from CourseLocations where CourseId in (select Id from Courses ... )
dass Sie in diesem Fall auch alle Ergebnisse auf einmal ziehen könnenQueryMultiple
quelle
Alternativ können Sie eine Abfrage mit einer Suche verwenden:
Siehe hier https://www.tritac.com/blog/dappernet-by-example/
quelle
Kein
lookup
Wörterbuch erforderlichquelle
Ich weiß, dass ich sehr spät dran bin, aber es gibt noch eine andere Option. Hier können Sie QueryMultiple verwenden. Etwas wie das:
quelle
Tut mir leid, dass ich zu spät zur Party komme (wie immer). Für mich ist es in Bezug auf Leistung und Lesbarkeit einfacher, eine zu verwenden
Dictionary
, wie es Jeroen K getan hat. Um eine Multiplikation der Header über Standorte hinweg zu vermeidenDistinct()
, entferne ich potenzielle Dups:quelle
Etwas fehlt. Wenn Sie nicht jedes Feld
Locations
in der SQL-Abfrage angeben , kann das ObjektLocation
nicht gefüllt werden. Schau mal:Mit
l.*
in der Abfrage, hatte ich die Liste der Standorte , aber ohne Daten.quelle
Ich bin mir nicht sicher, ob es jemand braucht, aber ich habe eine dynamische Version ohne Modell für eine schnelle und flexible Codierung.
quelle