Jak pobierać dane z bazy danych, szybko ale i wygodnie

0

Cześć,
Mam pytanie jak polecacie pobierać dane z bazy danych by było to w miarę optymalne ale tez łatwe w utrzymaniu ?
Zacząłem używac automapperra i Queryable Extensions ale niestety jak podejrzałem w sqlprofile jak bardzo nadmiarowe zapytania idą do bazy to trochę zwątpiłem.
Najszybszy sposób to pewnie ten za pomocą klas SQLCommand i SqlDataReader ale niestety ten sposób jest dosyć mozolny, ciężki w utrzymaniu i w momencie gdy trzeba coś zmodyfikować to można się załamać. Jak wy to robicie w swoich projektach ? Jak podchodzicie do tematu ? (chodzi mi o projekty duże, z wieloma ViemModelami itd )
Pozdrawiam

0

Automapper na pewno nie jest łatwy w utrzymaniu bo ukrywa sporo rzeczy. Co to znaczy że zapytania są nadmiarowe ? Jeśli klienci nie odczuwają jakiś mocnych opóźnień to nie ma sensu nic optymalizować. W większości aplikacji EF będzie wystarczająco wydajny. Jeśli jednak napotkasz jakieś problemy to przede wszystkim szukałbym optymalizacji po stronie bazy danych (indeksy, wypłaszczenie struktur, tabele in memory) potem jakiś cache po stronie aplikacji i ORM'a. Jeśli jednak chcesz koniecznie pisać sam zapytania to robiłbym to w bazie danych bo tam jest ich miejsce. Czyli procedury składowane itp i wywoływanie ich po stronie kodu. Procedury w bazie będą lepiej utrzymywalne niż zapytania w stringach w kodzie. Możesz je też łatwo wersjonować co ułatwia utrzymanie aplikacji.

3

Jeśli sobie EF nie radzi z wygenerowanie jakiegoś zapytania, to można wtedy użyć czystego SQL + EF:
Raw SQL Queries

Ewentualnie do samych odczytów można używać Dapper, ale do zapisów też wypadałoby mieć pełnego ORM, bo używanie Dappera jest zbyt toporne.

Także obecnie używam jedną z dwóch kombinacji

  • do zapisów EF + do odczytów Raw SQL Queries jak sobie EF nie radzi
  • do zapisów EF + do wszystkich odczytów Dapper
0

czy da się w jakiś inny sposob zapisać wyrażenie które podałem tak aby udało się je wykonac wykorzystujac projectTo ?

CreateMap<Car,CarFullInformationViewModel>()
.ForMember(d=>d.EngineName, o=>o.mapFrom(s=> Mapper.Map<IEngineName>(s.Engine).EngineName
; 

Create<Engine,IEngineName>()
.ForMember(d=>d.EngineName, o=>o.mapFrom(s=>s.Name != null ? s.Name : "Brak danych" )
;

Bo niestety obecnie Krzyczy że " Linq to Entities does not recognize the Method ......"

1 użytkowników online, w tym zalogowanych: 0, gości: 1