Skip to main content

Getting started with AutoMapper

DTO

DTO stands for Data Transfer Object. DTOs are there for transfer data between the different application or different layers within a single application. You can look at them as dump bags of information. The purpose of existence is just getting that information to a recipient. So that recipient doesn't get anything other than they expect.

The major problem that I had with this DTO is mapping one object to another. Every place where I need to transfer my data using DTO, either I have to use parameterized constructor or new object initialize to inject the information (data) into it.

Recently I found this library called AutoMapper which made my code awesome. AutoMapper is a simple little library built to solve a deceptively complex problem "getting rid of code that mapped one object to another".

AutoMapper

It all started with Source Object and Destination Object to work with (well, that's obvious!). This works best as long as the names of the source type's members match up to the destination type's members. If you have "FirstName" in the source type, this will automatically be mapped to a destination type member called "FirstName". Don't worry even if you don' have match up names, still can be done.

Getting start with AutoMapper 

To perform this magic, have to cast a spell ;)

Like any other feature, AutoMapper has to configure before using it. Configure in the sense that you need to create your mappings. No mappings, No magic.

Initially, you are marking that source object should map with destination object with required members. After that when you ask AutoMapper to map source object to destination object. AutoMapper will do it for you. because it knows which member should map with what

Most important three points you need to know about configuration are How, When and Where.

How

AutoMapper provides two APIs: a static API or an instance API.

When

Instance API allows you to change the configuration at the run time. That caused many problems, so the new Static API does not allow you to do this. You have to configure everything in one place.

Where

Instance Mapper can be placed before you place map (Line before map will do). But Static Mapper should only happen once per AppDomain. That means the best place to put the configuration code is in application startup, such as the Global.asax file for ASP.NET applications.

Demo


// Source 
public class Person
{
    public string FirstName { get; set; }
}

// Destination 
public class PersonDTO
{
    public string FirstName { get; set; }
}

The static API (Recommended):

// Configuration 
Mapper.Initialize(cfg => {
    cfg.CreateMap<Person, PersonDTO>();
});


// Map to
PersonDTO personDTO = Mapper.Map<PersonDTO>(new Person());

the instance API:

// Configuration
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<Person, PersonDTO>();
});


// Create a mapper instance
var mapper = config.CreateMapper();
//// OR
var mapper = new Mapper(config);


// Map to
PersonDTO personDTO = mapper.Map<PersonDTO>(new Person());

May the force be with you! 

Comments

Popular Posts

global.json file

  Symptoms Suddenly you get build errors in your build pipeline which perfectly builds in your local machine 🤔🤔🤔 Cause Most likely the root cause is .NET SDK versions. Your local machine builds on a different SDK and the pipeline builds on a different SDK. Resolution The ideal way of solving this is to force everyone to use one define .Net SDK. Regardless of whether it is a developer or CI pipeline. Simply to make this happen .NET  provides you a file called "global.json". The global.json file allows you to define which .NET SDK version is used when you run .NET CLI commands. Selecting the .NET SDK version is independent from specifying the runtime version a project targets. For information about specifying the runtime version instead of the SDK version, see Target frameworks . If you always want to use the latest SDK version that is installed on your machine, no global.json file is needed. Into the Depth The sample global.json file looks like the below, {    ...

SSAS: The Sort Order Specified For Distinct Count Records Is Incorrect.

Symptoms During a processing time of a cube that contains a distinct count measure, the process fails with the following error message: The sort order specified for distinct count records is incorrect Cause This is most likely caused by different sort order used on the data warehouse data set and the analysis service database data set. Resolution Modify the sort order of the data warehouse data set so that it will match with the analysis service database data set. Into the Depth  Navigate to the analysis database and start to process the desired database. When the processing begins, the Process progress window will pop up. Wait till the process gets failed. After the process failed, find the failing measure group and expand to the last node where you can see an SQL query. Double click on the query and view the details. This query gives you the exact order by the column which caused you this trouble.  Execute the query using the data warehouse datab...

Dynamic Assembly in C#

Static Assembly Vs Dynamic Assembly Static Assemblies are those assemblies which are stored on the disk permanently as a file or set of files. Since these assemblies are stored in the disk, those are only loaded when CLR requests.  These are the assemblies we are dealing with daily. Assemblies that I'm going to talk about today bit different. It completely opposite of the Static Assemblies. Those Assemblies are not stored on the disk before execution. When an application requires any type, which references from these assemblies, DOT NET will create these Assemblies at the runtime so that it will directly load into the memory. Why is it important ? Like I mentioned, this is not something we do very often. It is not all about how important it is. Personally, I think it is better to know this kind of hidden language features. More you play with this more you learn. I found cool stuff I can do with this. Hope it will be same for you as well. This is an old feature. How ...