Programavimas

Kaip dirbti su „AutoMapper“ C #

„AutoMapper“ yra populiari objektų susiejimo biblioteka, kuri gali būti naudojama objektams, priklausantiems skirtingiems tipams, žymėti. Pavyzdžiui, jums gali reikėti susieti savo programoje esančius DTO (duomenų perdavimo objektus) su modelio objektais. „AutoMapper“ taupo varginančias pastangas, kai reikia rankiniu būdu susieti vieną ar kelias tokių nesuderinamų tipų savybes.

Norėdami pradėti dirbti su „AutoMapper“, turėtumėte sukurti projektą „Visual Studio“ ir įdiegti „AutoMapper“. Galite įdiegti „AutoMapper“ iš „NuGet“ naudodami šią komandą „NuGet Package Manager Console“ lange:

PM> „Install-Package AutoMapper“

Kurkite susiejimus naudodami „AutoMapper“

Objekto-objekto žemėlapių kūrėjas, pvz., „AutoMapper“, vieno tipo įvesties objektą paverčia kito tipo išvesties objektu. Apsvarstykite šias dvi klases.

 visuomenės klasės „Autoriaus modelis“

    {

public int Id

        {

gauti; rinkinys;

        }

vieša eilutė Vardas

        {

pasiruošti;

        }

vieša eilutė Pavardė

        {

gauti; rinkinys;

        }

viešoji eilutė Adresas

        {

gauti; rinkinys;

        }

    }

visuomenės klasė AutoriusDTO

    {

public int Id

        {

gauti; rinkinys;

        }

vieša eilutė Vardas

        {

gauti; rinkinys;

        }

vieša eilutė Pavardė

        {

gauti; rinkinys;

        }

viešoji eilutė Adresas

        {

gauti; rinkinys;

        }

    }

Šis kodo fragmentas parodo, kaip galite sukurti žemėlapį tarp šių dviejų tipų: „AuthorModel“ ir „AuthorDTO“.

var config = nauja „MapperConfiguration“ (cfg => {

plg.CreateMap ();

            });

Tada atlikti tipų susiejimą yra taip paprasta, kaip parodyta šiame kodo fragmente.

„IMapper iMapper“ = config.CreateMapper ();

var šaltinis = naujas Autoriaus modelis ();

var paskirties vieta = iMapper.Map (šaltinis);

„AutoMapper“ pavyzdys

Dabar dirbkime su kai kuriais duomenimis. Žr. Šį kodo fragmentą, kuriame saugomi kai kurie duomenys šaltinio objekte, o paskirties objekte rodomos nuosavybės vertės atlikus susiejimą.

var config = nauja „MapperConfiguration“ (cfg => {

plg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var šaltinis = naujas Autoriaus modelis ();

šaltinis.Id = 1;

source.FirstName = "Joydipas";

source.LastName = "Kanjilal";

source.Address = "Indija";

var paskirties vieta = iMapper.Map (šaltinis);

Console.WriteLine ("Autoriaus vardas:" + paskirties.Vardas + "" + paskirties.Pavardė);

Kai vykdysite pirmiau nurodytą kodo dalį, bus rodomas autoriaus vardas, saugomas paskirties objekte. Tačiau paskirties FirstName ir paskirties LastName ypatybių vertės bus tokios pačios kaip šaltinio objekto, nes objektus sėkmingai susiejote naudodami „AutoMapper“!

Atminkite, kad „AutoMapper“ gali susieti bet kokį klasių rinkinį. Tačiau „AutoMapper“ vadovaujasi tam tikromis konvencijomis, iš kurių viena yra ta, kad atvaizduojami nuosavybės pavadinimai turėtų būti vienodi. Jei ypatybių pavadinimai nėra tapatūs, turite pranešti „AutoMapper“, kaip ypatybės turėtų būti susietos. Darant prielaidą, kad norime susieti dvi savybes „Contact“ ir „ContactDetails“, šis pavyzdys parodo, kaip tai galima pasiekti.

var config = nauja „MapperConfiguration“ (cfg => {

cfg.CreateMap ()

.ForMember (paskirties vieta => paskirties vieta. ContactDetails,

pasirenka => pasirenka.MapFrom (šaltinis => šaltinis.Kontaktas));

            });

Atkreipkite dėmesį į šį teiginį, kuris naudojamas kuriant paskirties objektą.

var paskirties vieta = iMapper.Map (šaltinis);

Jei paskirties objektas jau egzistuoja, galite naudoti žemiau pateiktą sakinį.

„iMapper.Map“ (šaltinio objektas, paskirties objektas);

Iš esmės aukščiau pateiktą kodo fragmentą galima naudoti dviem jau esamiems objektams atvaizduoti.

Projekcijų naudojimas programoje „AutoMapper“

„AutoMapper“ puikiai palaiko projekcijas. Projekcijos naudojamos šaltinio reikšmėms susieti su paskirties vieta, kuri neatitinka šaltinio struktūros. (Priešingai, žemėlapis, kurį aptarėme aukščiau, buvo „vienas prie vieno“ atvaizdavimas.)

Dabar pažvelkime į projekciją. Pavyzdžiui, apsvarstykite šią klasę.

 visuomenės klasės adresas

    {

viešoji eilutė Miestas {get; rinkinys; }

public string State {get; rinkinys; }

viešoji eilutė Šalis {get; rinkinys; }

    }

Tegul mūsų „AuthorModel“ klasė naudoja „Address“ klasę, kad išsaugotų autorių adresų informaciją. Štai kaip atrodytų atnaujinta „AuthorModel“ klasė.

 visuomenės klasės „Autoriaus modelis“

    {

public int Id

        {

gauti; rinkinys;

        }

vieša eilutė Vardas

        {

pasiruošti;

        }

vieša eilutė Pavardė

        {

gauti; rinkinys;

        }

viešasis adresas

        {

gauti; rinkinys;

        }

    }

O štai atnaujinta „AuthorDTO“ klasė.

visuomenės klasė AutoriusDTO

    {

public int Id

        {

gauti; rinkinys;

        }

vieša eilutė Vardas

        {

gauti; rinkinys;

        }

vieša eilutė Pavardė

        {

gauti; rinkinys;

        }

viešoji eilutė Miestas {get; rinkinys; }

public string State {get; rinkinys; }

viešoji eilutė Šalis {get; rinkinys; }

    }

Dabar tarkime, kad turime susieti „AuthorDTO“ ir „AuthorModel“ klases. Šis kodo fragmentas parodo, kaip tai galima pasiekti.

var config = nauja „MapperConfiguration“ (cfg => {

cfg.CreateMap ()

.ForMember (paskirties vieta => paskirties vieta. Adresas,

map => map.MapFrom (

šaltinis => naujas adresas

                  {

Miestas = šaltinis. Miestas,

Valstybė = šaltinis. Valstybė,

Šalis = šaltinis. Šalis

                  }));

Apie tolesnes „AutoMapper“ funkcijas aptarsiu būsimame įraše. Iki tol daugiau apie „AutoMapper“ galite sužinoti šioje nuorodoje.

Kaip padaryti daugiau C #:

  • Kada naudoti abstrakčią klasę ir sąsają C #
  • Kaip dirbti su „AutoMapper“ C #
  • Kaip naudoti lambda išraiškas C #
  • Kaip dirbti su „Action“, „Func“ ir „Predicate“ delegatais C #
  • Kaip dirbti su delegatais C #
  • Kaip įdiegti paprastą kaupiklį C #
  • Kaip dirbti su atributais C #
  • Kaip dirbti su „Log4net“ C #
  • Kaip įgyvendinti saugyklos dizaino modelį C #
  • Kaip dirbti su atspindžiu C #
  • Kaip dirbti su failų stebėjimo programa C #
  • Kaip atlikti tingų inicializavimą C #
  • Kaip dirbti su MSMQ C #
  • Kaip dirbti su plėtinių metodais C #
  • Kaip mums lambda išraiškos C #
  • Kada naudoti nepastovų raktinį žodį C #
  • Kaip naudoti pajamingumo raktinį žodį C #
  • Kaip įgyvendinti polimorfizmą C #
  • Kaip sukurti savo užduočių planavimo priemonę C #
  • Kaip dirbti su „RabbitMQ“ C #
  • Kaip dirbti su dvigubu C #
  • Naršyti virtualius ir abstrakčius metodus C #