Kako raditi s AutoMapperom u C #

AutoMapper je popularna biblioteka za mapiranje objekata prema objektima koja se može koristiti za mapiranje objekata koji pripadaju različitim vrstama. Kao primjer, možda ćete trebati preslikati DTO (Objekte za prijenos podataka) u svojoj aplikaciji na objektne modele. AutoMapper vam štedi dosadan napor ručnog mapiranja jednog ili više svojstava takvih nekompatibilnih vrsta.

Da biste započeli rad s AutoMapperom, trebali biste stvoriti projekt u Visual Studiju, a zatim instalirati AutoMapper. Možete instalirati AutoMapper iz NuGet-a pomoću sljedeće naredbe u prozoru konzole NuGet Package Manager:

PM> Instaliraj-paket AutoMapper

Stvorite preslikavanja pomoću programa AutoMapper

Mapa objekt-objekt, kao što je AutoMapper, pretvara ulazni objekt jedne vrste u izlazni objekt druge vrste. Razmotrite sljedeće dvije klase.

 javni razred AutorModel

    {

        javni int Id

        {

            dobiti; postavljen;

        }

        javni niz FirstName

        {

            pripremi se;

        }

        javni niz LastName

        {

            dobiti; postavljen;

        }

        javni niz Adresa

        {

            dobiti; postavljen;

        }

    }

 javni razred AutorDTO

    {

        javni int Id

        {

            dobiti; postavljen;

        }

        javni niz FirstName

        {

            dobiti; postavljen;

        }

        javni niz LastName

        {

            dobiti; postavljen;

        }

        javni niz Adresa

        {

            dobiti; postavljen;

        }

    }

Sljedeći isječak koda pokazuje kako možete stvoriti mapu između ove dvije vrste, AuthorModel i AuthorDTO.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

Tada je izvođenje mapiranja između tipova jednostavno, kao što pokazuje sljedeći dio koda.

IMapper iMapper = config.CreateMapper ();

var izvor = novi AutorModel ();

var odredište = iMapper.Map (izvor);

Primjer AutoMapper-a 

Ajmo sada raditi s nekim podacima. Pogledajte sljedeći dio koda koji pohranjuje neke podatke u izvorni objekt, a zatim prikazuje vrijednosti svojstva u odredišnom objektu nakon što je mapiranje završeno.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var izvor = novi AutorModel ();

izvor.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "Indija";

var odredište = iMapper.Map (izvor);

Console.WriteLine ("Ime autora:" + odredište.Ime + "" + odredište.Posljednje ime);

Kada izvršite gornji dio koda, prikazat će se ime autora pohranjeno unutar odredišnog objekta. Međutim, vrijednosti svojstva odredišta Ime i odredište Prezime bit će iste kao izvorni objekt jer ste objekte uspješno mapirali pomoću programa AutoMapper!

Imajte na umu da AutoMapper može mapirati bilo koji skup klasa. Međutim, AutoMapper slijedi određene konvencije, od kojih je jedna da nazivi svojstava koja se mapiraju trebaju imati identična imena. Ako nazivi svojstava nisu identični, tada morate obavijestiti AutoMapper kako se svojstva trebaju mapirati. Pod pretpostavkom da želimo mapirati dva svojstva Contact i ContactDetails, sljedeći primjer ilustrira kako se to može postići.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                .ForMember (odredište => odredište.ContactDetails,

               opts => opts.MapFrom (izvor => izvor.Kontakt));

            });

Obratite pažnju na sljedeću izjavu koja se koristi za stvaranje odredišnog objekta.

var odredište = iMapper.Map (izvor);

Ako odredišni objekt već postoji, umjesto toga možete upotrijebiti naredbu u nastavku.

iMapper.Map (sourceObject, destinationObject);

U osnovi, gornji isječak koda može se koristiti za mapiranje dva objekta koja već postoje.

Korištenje projekcija u programu AutoMapper

AutoMapper pruža izvrsnu podršku za projekcije. Projekcije se koriste za mapiranje izvornih vrijednosti na odredište koje se ne podudara sa strukturom izvora. (Suprotno tome, mapiranje o kojem smo gore razgovarali bilo je pojedinačno.)

Pogledajmo sada projekciju. Na primjer, uzmite u obzir sljedeći razred.

 javna klasa Adresa

    {

        javni niz Grad {get; postavljen; }

        javni niz State {get; postavljen; }

        javni niz Country {get; postavljen; }

    }

Neka naša klasa AuthorModel koristi klasu Adresa za pohranu podataka o adresi autora. Evo kako bi izgledala ažurirana klasa AuthorModel.

 javni razred AutorModel

    {

        javni int Id

        {

            dobiti; postavljen;

        }

        javni niz FirstName

        {

            pripremi se;

        }

        javni niz LastName

        {

            dobiti; postavljen;

        }

        javna adresa Adresa

        {

            dobiti; postavljen;

        }

    }

 A evo i ažurirane klase AuthorDTO.

javni razred AutorDTO

    {

        javni int Id

        {

            dobiti; postavljen;

        }

        javni niz FirstName

        {

            dobiti; postavljen;

        }

        javni niz LastName

        {

            dobiti; postavljen;

        }

        javni niz Grad {get; postavljen; }

        javni niz State {get; postavljen; }

        javni niz Country {get; postavljen; }

    }

Sad pretpostavimo da moramo mapirati klase AuthorDTO i AuthorModel. Sljedeći isječak koda ilustrira kako se to može postići.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                   .ForMember (odredište => odredište. Adresa,

              map => map.MapFrom (

                  izvor => nova adresa

                  {

                      Grad = izvor .Grad,

                      Država = izvor. Država,

                      Zemlja = izvor.Država

                  }));

O naprednijim značajkama AutoMappera razgovarat ću u sljedećem postu ovdje. Do tada, više o AutoMapperu možete saznati na ovoj poveznici.

Kako učiniti više u C #:

  • Kada koristiti apstraktnu klasu naspram sučelja u C #
  • Kako raditi s AutoMapperom u C #
  • Kako koristiti lambda izraze u C #
  • Kako raditi s delegatima Action, Func i Predicate u C #
  • Kako raditi s delegatima u C #
  • Kako implementirati jednostavni zapisnik u C #
  • Kako raditi s atributima u C #
  • Kako raditi s log4netom na C #
  • Kako implementirati obrazac dizajna spremišta u C #
  • Kako raditi s refleksijom u C #
  • Kako raditi s nadzornikom datoteka u C #
  • Kako izvesti lijenu inicijalizaciju u C #
  • Kako raditi s MSMQ-om u C #
  • Kako raditi s metodama produženja u C #
  • Kako do nas lambda izrazi u C #
  • Kada upotrijebiti hlapljivu ključnu riječ u C #
  • Kako koristiti ključnu riječ yield u C #
  • Kako implementirati polimorfizam u C #
  • Kako izraditi vlastiti planer zadataka u C #
  • Kako raditi s RabbitMQ u C #
  • Kako raditi s korpicom u C #
  • Istraživanje virtualnih i apstraktnih metoda u C #