Mapping in .net, the problem
Automapper using .net is a good way to map betwen different classes in .net. Lets learn automapper by example.
If you have object in a data access layer and you want to send to another layer, as the following:
File: CustomerDAL.cs
namespace DataAccess { public class CustomerDAL { public int Id { get; set; } public string Name { get; set; } } }
File: CustomerBLL.cs
namespace Api.Business { public class CustomerBLL { public int Id { get; set; } public string Name { get; set; } } }
Lets say, you need to map CustomerBLL object to CustomerDAL object, you can do something link
[HttpGet] public async Task<ActionResult<CustomerBLL>> Get() { CustomerDAL customerDAL = new CustomerDAL() { Id = 1, Name = "Customer 1" }; CustomerBLL customerBLL = new CustomerBLL() { Id = customerDAL.Id, Name = customerDAL.Name }; return await Task.FromResult(customerBLL); }
The result without using auto mapper:

Where CustomerDAL is a class This is way is real time consuming and can lead to many mistakes
The solution
Using Automapper using .net
Now add the following package:
Install-Package AutoMapper or
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection or from package manager as:

Note: add this package in the project where you want to use the auto mapper.
After installing, the auto mapper package, create a new mapping profile under the mapping folder in api project
using Api.Business; using AutoMapper; using DataAccess; namespace Api.Mappings { public class MappingProfile : Profile { public MappingProfile() { //Map from customerDAL to customerBLL Object CreateMap<CustomerDAL, CustomerBLL > (); } } }
Then config the mapping profile in startup.cs as the following:
public void ConfigureServices(IServiceCollection services) { services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); // <---- Add this line services.AddControllers(); }
Lets say, you need to map CustomerBLL object to CustomerDAL object, you can do something link
[HttpGet("GetUsingMapper")] public async Task<ActionResult<CustomerBLL>> GetUsingMapper() { CustomerDAL customerDAL = new CustomerDAL() { Id = 1, Name = "Customer from automapper" }; CustomerBLL customerBLL = _mapper.Map<CustomerBLL>(customerDAL); return await Task.FromResult(customerBLL); }
The result using using auto mapper:

Maybe you ge the following error,AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.

This error happened because you may confused in apply mapping between classes, for ex: in MappingProfile.cs and instead of applying something like this:
// Map from customerDAL to customerBLL Object CreateMap<CustomerDAL, CustomerBLL > ();
You applied something like
// Map from customerBLL to customerDAL Object CreateMap<CustomerBLL, CustomerDAL> ();
To solve this issue, make sure you map from customer DAL to customer BLL Object, as the following
// Map from customerDAL to customerBLL Object CreateMap<CustomerDAL, CustomerBLL > ();
or use
CreateMap<CustomerBLL, CustomerDAL> ().ReverseMap();
You can find the project source code at github
We can help you to build such as software tools/snipts, you contact us from here