Obecnie używam Entity Framework do mojego dostępu do bazy danych, ale chcę rzucić okiem na Dapper. Mam takie zajęcia:
public class Course{
public string Title{get;set;}
public IList<Location> Locations {get;set;}
...
}
public class Location{
public string Name {get;set;}
...
}
Tak więc jeden kurs może być prowadzony w kilku miejscach. Entity Framework wykonuje dla mnie mapowanie, więc mój obiekt kursu jest wypełniony listą lokalizacji. Jak mam to zrobić z Dapper, czy to w ogóle możliwe, czy też muszę to zrobić w kilku krokach zapytania?
Odpowiedzi:
Dapper nie jest w pełni rozwiniętym ORMem, nie obsługuje magicznego generowania zapytań i tym podobnych.
W twoim konkretnym przykładzie prawdopodobnie zadziałałoby:
Weź udział w kursach:
Pobierz odpowiednie mapowanie:
Chwyć odpowiednie lokalizacje
Mapuj to wszystko
Pozostawiając to czytelnikowi, tworzysz kilka map i iterujesz po swoich kursach zapełniających lokalizacje.
Zastrzeżenie
in
trik zadziała, jeśli masz mniej niż 2100 wyszukiwań (SQL Server), jeśli masz więcej prawdopodobnie chcesz zmienić zapytanie, abyselect * from CourseLocations where CourseId in (select Id from Courses ... )
jeśli jest to sprawa może równie dobrze można szarpać wszystkich wyników za jednym razem za pomocąQueryMultiple
źródło
Alternatywnie możesz użyć jednego zapytania z wyszukiwaniem:
Zobacz tutaj https://www.tritac.com/blog/dappernet-by-example/
źródło
Nie ma potrzeby używania
lookup
słownikaźródło
Wiem, że jestem na to naprawdę spóźniony, ale jest inna opcja. Możesz użyć QueryMultiple tutaj. Coś takiego:
źródło
Przepraszam, że spóźniłem się na imprezę (jak zawsze). Dla mnie łatwiej jest używać a
Dictionary
, tak jak zrobił to Jeroen K. , pod względem wydajności i czytelności. Ponadto, aby uniknąć mnożenia nagłówków w różnych lokalizacjach , używamDistinct()
do usuwania potencjalnych duplikatów:źródło
Coś brakuje. Jeśli nie określisz każdego pola
Locations
w zapytaniu SQL, obiektLocation
nie może zostać wypełniony. Spójrz:Używając
l.*
w zapytaniu, miałem listę lokalizacji, ale bez danych.źródło
Nie jestem pewien, czy ktoś tego potrzebuje, ale mam dynamiczną wersję bez modelu do szybkiego i elastycznego kodowania.
źródło