Programování

Jak pracovat s AutoMapperem v C #

AutoMapper je oblíbená knihovna mapování mezi objekty, kterou lze použít k mapování objektů patřících k odlišným typům. Jako příklad možná budete muset namapovat DTO (objekty přenosu dat) ve vaší aplikaci na objekty modelu. AutoMapper vám ušetří zdlouhavé úsilí při ručním mapování jedné nebo více vlastností takových nekompatibilních typů.

Chcete-li začít pracovat s AutoMapperem, měli byste vytvořit projekt v sadě Visual Studio a poté nainstalovat AutoMapper. AutoMapper můžete nainstalovat z NuGet pomocí následujícího příkazu v okně konzoly Správce balíčků NuGet:

PM> Automatický mapovač instalačního balíčku

Vytvářejte mapování pomocí AutoMapperu

Mapovač objekt-objekt, například AutoMapper, převede vstupní objekt jednoho typu na výstupní objekt jiného typu. Zvažte následující dvě třídy.

 veřejná třída AuthorModel

    {

public int Id

        {

dostat; soubor;

        }

veřejný řetězec FirstName

        {

dostat; nastavit;

        }

veřejný řetězec Příjmení

        {

dostat; soubor;

        }

veřejný řetězec Adresa

        {

dostat; soubor;

        }

    }

veřejná třída AuthorDTO

    {

public int Id

        {

dostat; soubor;

        }

veřejný řetězec FirstName

        {

dostat; soubor;

        }

veřejný řetězec Příjmení

        {

dostat; soubor;

        }

veřejný řetězec Adresa

        {

dostat; soubor;

        }

    }

Následující fragment kódu ukazuje, jak můžete vytvořit mapu mezi těmito dvěma typy, AuthorModel a AuthorDTO.

var config = nová MapperConfiguration (cfg => {

cfg.CreateMap ();

            });

Pak je provedení mapování mezi typy tak jednoduché, jak ukazuje následující část kódu.

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

var destination = iMapper.Map (zdroj);

Příklad AutoMapper

Pojďme nyní pracovat s některými daty. Podívejte se na následující část kódu, která ukládá některá data do zdrojového objektu a poté po dokončení mapování zobrazí hodnoty vlastností v cílovém objektu.

var config = nová MapperConfiguration (cfg => {

cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

source.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "Indie";

var destination = iMapper.Map (zdroj);

Console.WriteLine ("Jméno autora:" + destination.FirstName + "" + destination.LastName);

Po provedení výše uvedeného kódu se zobrazí jméno autora uložené v cílovém objektu. Hodnoty cílového FirstName a cílového LastName vlastnosti však budou stejné jako zdrojový objekt, protože jste objekty úspěšně mapovali pomocí AutoMapper!

Všimněte si, že AutoMapper může mapovat libovolnou sadu tříd. AutoMapper však dodržuje určité konvence, z nichž jedna je, že mapované názvy vlastností by měly mít shodné názvy. Pokud názvy vlastností nejsou totožné, musíte nechat AutoMapper vědět, jak mají být vlastnosti mapovány. Za předpokladu, že chceme mapovat dvě vlastnosti Contact a ContactDetails, ukazuje následující příklad, jak toho lze dosáhnout.

var config = nová MapperConfiguration (cfg => {

cfg.CreateMap ()

.ForMember (destination => destination.ContactDetails,

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

            });

Všimněte si následujícího prohlášení, které se používá k vytvoření cílového objektu.

var destination = iMapper.Map (zdroj);

Pokud cílový objekt již existuje, můžete místo toho použít níže uvedený příkaz.

iMapper.Map (sourceObject, destinationObject);

V podstatě lze výše uvedený fragment kódu použít k mapování dvou již existujících objektů.

Používání projekcí v AutoMapperu

AutoMapper poskytuje vynikající podporu pro projekce. Projekce se používají k mapování zdrojových hodnot na cíl, který neodpovídá struktuře zdroje. (Naproti tomu mapování, o kterém jsme diskutovali výše, bylo mapování jedna k jedné.)

Pojďme se nyní podívat na projekci. Zvažte například následující třídu.

 adresa veřejné třídy

    {

public string City {get; soubor; }

public string State {get; soubor; }

public string Země {get; soubor; }

    }

Pojďme nechat naši třídu AuthorModel použít třídu Adresa k ukládání adresních údajů autorů. Zde by vypadala aktualizovaná třída AuthorModel.

 veřejná třída AuthorModel

    {

public int Id

        {

dostat; soubor;

        }

veřejný řetězec FirstName

        {

dostat; nastavit;

        }

veřejný řetězec Příjmení

        {

dostat; soubor;

        }

adresa veřejné adresy

        {

dostat; soubor;

        }

    }

A tady je aktualizovaná třída AuthorDTO.

veřejná třída AuthorDTO

    {

public int Id

        {

dostat; soubor;

        }

veřejný řetězec FirstName

        {

dostat; soubor;

        }

veřejný řetězec Příjmení

        {

dostat; soubor;

        }

public string City {get; soubor; }

public string State {get; soubor; }

public string Země {get; soubor; }

    }

Nyní předpokládejme, že musíme mapovat třídy AuthorDTO a AuthorModel. Následující fragment kódu ukazuje, jak toho lze dosáhnout.

var config = nová MapperConfiguration (cfg => {

cfg.CreateMap ()

.ForMember (destination => destination.Address,

map => map.MapFrom (

zdroj => nová adresa

                  {

Město = zdroj .Město,

Stát = zdroj .Stát,

Země = zdroj. Země

                  }));

Pokročilé funkce AutoMapperu se budu zabývat v budoucím příspěvku zde. Do té doby se můžete dozvědět více o AutoMapperu na tomto odkazu.

Jak udělat více v C #:

  • Kdy použít abstraktní třídu vs. rozhraní v C #
  • Jak pracovat s AutoMapperem v C #
  • Jak používat výrazy lambda v C #
  • Jak pracovat s delegáty Action, Func a Predicate v C #
  • Jak pracovat s delegáty v C #
  • Jak implementovat jednoduchý záznamník v C #
  • Jak pracovat s atributy v C #
  • Jak pracovat s log4net v C #
  • Jak implementovat vzor návrhu úložiště v C #
  • Jak pracovat s odrazem v C #
  • Jak pracovat se souborovým systémem v C #
  • Jak provést línou inicializaci v C #
  • Jak pracovat s MSMQ v C #
  • Jak pracovat s metodami rozšíření v C #
  • Jak na nás lambda výrazy v C #
  • Kdy použít volatilní klíčové slovo v C #
  • Jak používat klíčové slovo výnos v C #
  • Jak implementovat polymorfismus v C #
  • Jak vytvořit svůj vlastní plánovač úloh v C #
  • Jak pracovat s RabbitMQ v C #
  • Jak pracovat s n-ticí v C #
  • Zkoumání virtuálních a abstraktních metod v C #
$config[zx-auto] not found$config[zx-overlay] not found