Programiranje

Kako delati z AutoMapper v C #

AutoMapper je priljubljena knjižnica za preslikavo od predmeta do predmeta, ki se lahko uporablja za preslikavo predmetov, ki pripadajo različnim vrstam. Kot primer boste morda morali preslikati DTO (Objekte za prenos podatkov) v vaši aplikaciji na modelne predmete. AutoMapper vam prihrani dolgočasen napor ročnega preslikavanja ene ali več lastnosti takšnih nezdružljivih vrst.

Če želite začeti delati s programom AutoMapper, ustvarite projekt v Visual Studio in nato namestite program AutoMapper. AutoMapper lahko namestite iz programa NuGet z naslednjim ukazom v oknu konzole NuGet Package Manager:

PM> AutoMapper za namestitev paketa

Ustvarite preslikave s pomočjo AutoMapper

Preslikava objekt-objekt, kot je AutoMapper, pretvori vhodni objekt ene vrste v izhodni objekt druge vrste. Upoštevajte naslednja dva razreda.

 javni razred AuthorModel

    {

javni int Id

        {

dobili; set;

        }

javni niz FirstName

        {

pripravi se;

        }

javni niz Priimek

        {

dobili; set;

        }

javni niz Naslov

        {

dobili; set;

        }

    }

javni razred AuthorDTO

    {

javni int Id

        {

dobili; set;

        }

javni niz FirstName

        {

dobili; set;

        }

javni niz Priimek

        {

dobili; set;

        }

javni niz Naslov

        {

dobili; set;

        }

    }

Naslednji delček kode prikazuje, kako lahko ustvarite zemljevid med tema dvema vrstama, AuthorModel in AuthorDTO.

var config = new MapperConfiguration (cfg => {

cfg.CreateMap ();

            });

Potem je izvedba preslikave med vrstami tako preprosta, kot kaže naslednji del kode.

IMapper iMapper = config.CreateMapper ();

var vir = new AuthorModel ();

var destinacija = iMapper.Map (vir);

Primer AutoMapper

Poglejmo zdaj nekaj podatkov. Glejte naslednjo kodo, ki shrani nekaj podatkov v izvorni objekt in nato po končanem preslikavanju prikaže vrednosti lastnosti v ciljnem objektu.

var config = new MapperConfiguration (cfg => {

cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var vir = new AuthorModel ();

vir.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "Indija";

var destinacija = iMapper.Map (vir);

Console.WriteLine ("Ime avtorja:" + destination.FirstName + "" + destination.LastName);

Ko izvedete zgornji del kode, se prikaže ime avtorja, shranjeno znotraj ciljnega predmeta. Vendar pa bosta vrednosti ciljne lastnosti FirstName in Destiny LastName enake izvornemu objektu, ker ste predmete uspešno preslikali z AutoMapper!

Upoštevajte, da lahko AutoMapper preslika kateri koli niz razredov. Vendar AutoMapper sledi določenim konvencijam, med katerimi je ena, da morajo biti imena lastnosti, ki se preslikajo, enaka. Če imena lastnosti niso enaka, morate AutoMapper sporočiti, kako naj se lastnosti preslikajo. Če predpostavimo, da želimo preslikati dve lastnosti Contact in ContactDetails, naslednji primer ponazarja, kako je to mogoče doseči.

var config = new MapperConfiguration (cfg => {

cfg.CreateMap ()

.ForMember (destination => destination.ContactDetails,

opts => opts.MapFrom (vir => source.Contact));

            });

Upoštevajte naslednjo izjavo, ki se uporablja za ustvarjanje ciljnega predmeta.

var destinacija = iMapper.Map (vir);

Če ciljni objekt že obstaja, lahko namesto njega uporabite spodnji stavek.

iMapper.Map (sourceObject, destinationObject);

V bistvu je zgornji delček kode mogoče uporabiti za preslikavo dveh predmetov, ki že obstajata.

Uporaba projekcij v programu AutoMapper

AutoMapper nudi odlično podporo za projekcije. Projekcije se uporabljajo za preslikavo izvornih vrednosti na cilj, ki se ne ujema s strukturo vira. (Nasprotno pa je bilo preslikavo, o katerem smo razpravljali zgoraj, individualno preslikavo.)

Poglejmo zdaj projekcijo. Na primer, upoštevajte naslednji razred.

 javni razred Naslov

    {

javni niz Mesto {get; set; }

javni niz države {get; set; }

javni niz Država {get; set; }

    }

Naj naš razred AuthorModel uporablja razred Address za shranjevanje naslovov o avtorjih. Tukaj je, kako bi izgledal posodobljeni razred AuthorModel.

 javni razred AuthorModel

    {

javni int Id

        {

dobili; set;

        }

javni niz FirstName

        {

pripravi se;

        }

javni niz Priimek

        {

dobili; set;

        }

javni naslov

        {

dobili; set;

        }

    }

In tukaj je posodobljeni razred AuthorDTO.

javni razred AuthorDTO

    {

javni int Id

        {

dobili; set;

        }

javni niz FirstName

        {

dobili; set;

        }

javni niz Priimek

        {

dobili; set;

        }

javni niz Mesto {get; set; }

javni niz države {get; set; }

javni niz Država {get; set; }

    }

Zdaj predpostavimo, da moramo preslikati razrede AuthorDTO in AuthorModel. Naslednji delček kode prikazuje, kako je to mogoče doseči.

var config = new MapperConfiguration (cfg => {

cfg.CreateMap ()

.ForMember (cilj => cilj. Naslov,

map => map.MapFrom (

vir => nov naslov

                  {

Mesto = vir .Mesto,

Država = vir. Država,

Država = vir. Država

                  }));

O naprednejših funkcijah AutoMapper bom razpravljal v prihodnji objavi tukaj. Do takrat lahko več o AutoMapperju izveste na tej povezavi.

Kako narediti več v jeziku C #:

  • Kdaj uporabiti abstraktni razred v primerjavi z vmesnikom v jeziku C #
  • Kako delati z AutoMapper v C #
  • Kako uporabljati lambda izraze v jeziku C #
  • Kako delati z delegati Action, Func in Predicate v C #
  • Kako delati z delegati v C #
  • Kako implementirati preprost zapisovalnik v jeziku C #
  • Kako delati z atributi v jeziku C #
  • Kako delati z log4net v C #
  • Kako implementirati vzorec oblikovanja repozitorija v C #
  • Kako delati z refleksijo v jeziku C #
  • Kako delati z nadzornikom datotek v C #
  • Kako izvesti leno inicializacijo v C #
  • Kako delati z MSMQ v C #
  • Kako delati z razširitvenimi metodami v jeziku C #
  • Kako do lambda izrazov v jeziku C #
  • Kdaj uporabiti hlapljivo ključno besedo v jeziku C #
  • Kako uporabiti ključno besedo yield v jeziku C #
  • Kako uporabiti polimorfizem v jeziku C #
  • Kako zgraditi lasten načrtovalnik opravil v C #
  • Kako delati z RabbitMQ v C #
  • Kako delati s korpico v jeziku C #
  • Raziskovanje virtualnih in abstraktnih metod v jeziku C #