Simple.Data, biblioteka o której wspomniałem w poprzednim wpisie, dostarcza nam możliwość dynamicznego operowania na bazie danych. Co, jeśli chcemy zmapować wyciągnięte dane np. na konkretny ViewModel?
Można oczywiście wykonać ręczne mapowanie, ale co jeżeli chcielibyśmy robić to automatycznie? Pierwsza myśl? AutoMapper. Niestety, nie dostarcza on możliwości mapowania typów dynamicznych.
Slapper to biblioteka, której potrzebujemy. Jak to wygląda w praktyce?
public IEnumerable<dynamic> GetAllMuseumsByCityCode(string cityCode) { return Database.Open().Museums.FindAllBy(CityCode: cityCode); }
Mamy metodę GetAllMuseumsByCityCode, która zwraca nam kolekcję muzeów, przedstawionych jako typy dynamiczne. Następnie przygotowujemy ViewModel dla muzeum:
public class MuseumViewModel { public string Name { get; set; } public string CityCode { get; set; } public string Details { get; set; } } }
Po czym mapujemy uzyskaną wcześniej kolekcję na kolekcję zawierającą obiekty MuseumViewModel. Jak widać jest to bardzo prosta operacja:
public IEnumerable<MuseumViewModel> GetAllMuseumsByCityCode(string cityCode) { var museums = _museumService.GetAllMuseumsByCityCode(cityCode); var museumsViewModel = Slapper.AutoMapper.MapDynamic<MuseumViewModel>(museums); return museumsViewModel; }
Po więcej informacji odsyłam do dokumentacji biblioteki Slapper.
Simple data samo mapuje dynamic :
http://simplefx.org/simpledata/docs/pages/Retrieve/WorkingWithPOCOs.htm
A to mnie zaskoczyłeś! (jak mogłem tego nie zauważyć…) To w takim razie Slapper musi zostać potraktowany jako alternatywa 🙂
Więcej kommitów!