Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

21.

Automapper
Vad vi går igenom
 Att mappa data

 Vad är Automapper ?

 Varför Automapper ?

 CreateMap och ForMember


Att mappa data i webblösningar
 Att mappa data innebär oftast att omvandla det till objekt.
Vi har tidigare varit med om flera situationer i applikation-
er där data har mappats.

 Ta emot JSON data kan vara enkelt men i vissa lägen


bör det omvandlas till ett annat format
 Andra exempel är Dapper (object relational mapper) där
modellklasser I C# mappas med databas-objekt. Och
model binding i MVC där input data från webbformulär
mappas med modellklasser i applikationen.
DTO- Data transfer object
 Inom programmering är DTO ett pattern för att skapa
objekt som används för att skicka data mellan olika
processer tex i samband med web api:er.

 Används bla för att undvika att visa sin interna


datastruktur när man bygger web api:er. Istället för att
göra flera anrop skickas även stora datastrukturer i ett
anrop.

 Innehåller även ibland meta data tex vid anrop till web
api:er information om sökningen (parametrar, tidpunkt)
som gjordes och antal träffar mm.
Domain object

 De objekt som hanteras internt i applikationen och som


kanske har en koppling till en databas.

 I ett web api skickas i regel inte objekt i detta format utan
mappas.

 I många applikationer sker en mappning mellan DTO


objekt och domain object.
Svar från ett web api innehåller ofta
data som behöver filtreras bort.
Och man vill många gånger inte
använda samma format internt som
data skickas eller tas emot i. Det
behövs någon form av mappning
Att mappa data i webblösningar

Mappning med Utdata oftast i


Indata tex JSON
någon teknik form av klasser
Vad är Automapper?
 Det är en object-object mapper vilket innebär att indata
av en viss objekttyp omvandlas till utdata av en annan
typ.

 Installeras via ett Nuget paket i en lösning. Ett verktyg


som kan användas i alla typer av applikationer men som
är mycket vanligt i samband med web api:er.

 Innehåller mycket stöd för att hantera vanliga situationer


vid mappning av data.
Varför använda Automapper ?
 Sparar mycket onödigt kodande. Innehåller mycket stöd
för att göra mappningsprocessen på ett enkelt och
prestandaoptimerat sätt.

 Indata kan komma från en extern källa som man inte har
kontroll över. Vill inte skapa beroenden i koden till det
datat. Kopplingen blir istället till ett kontrakt som mappar
datat.

 Ett enhetligt sätt att arbeta med mappning i hela


applikationen.
Sätta upp Automapper
Det första som görs är att installera ett Nuget paket som
heter :

AutoMapper.Extensions.Microsoft.DependencyInjection

Därefter sätts det upp i Program

builder.services.AddAutoMapper(typeof(Startup));
builder.services.AddControllers ();
Profile klasser

 För att sätta upp mappningen skapas en profile klass.


Den ärver från basklassen Profile.

 Här hanteras mappningen mellan indata som skall


mappas och de interna klasserna. Eller omvänt när ett
web api skall skicka iväg data.

 Det bör skapas en egen mapp där alla profile klasser


läggs.
CreateMap och ForMember
För att skapa en mappning mellan två klasser måste
CreateMap användas och ForMember för varje property
som mappas. Heter två propertys samma sak hanterar
Automapper dessa automatiskt.
public class PersonProfile: Profile
{
public PersonProfile()
{
CreateMap<PersonDTO, PersonDomain>()
.ForMember(dest => dest.Mail,
opt => opt.MapFrom(src => src.Email))
.ForMember(dest => dest.Name,
opt => opt.MapFrom(src => src.FullName))
Använda en mappning

Sätts upp med dependency injection i applikationen. För


att kunna använda det måste det injectas via konstruktorn.
Mappningen görs med en metod som heter Map.

private readonly IMapper _mapper;


public PersonController(IMapper mapper)
{
_mapper = mapper;
}

//Mappningen görs med map metoden


var mappedPerson = _mapper.Map<PersonDTO>(person);
Länkar

https://docs.automapper.org/en/stable/Getting-started.html

https://code-maze.com/automapper-net-core/

https://dotnettutorials.net/lesson/automapper-in-c-sharp/
Länkar - videos

https://youtu.be/ncRjahgY6hs
DEMO
Flattening

 Om jag hinner detta!!

 Vad innebär flattening?

 Hur används ReverseMap?

 XX

You might also like