Simple.Data – mapowanie na ViewModel

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.

3 thoughts on “Simple.Data – mapowanie na ViewModel

    1. A to mnie zaskoczyłeś! (jak mogłem tego nie zauważyć…) To w takim razie Slapper musi zostać potraktowany jako alternatywa 🙂

Leave a Reply to maciejaniserowicz Cancel reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s