Mappatura di tipo complesso in tipo primitivo utilizzando AutoMapper in C#

Mappatura di tipo complesso in tipo primitivo utilizzando AutoMapper in C#

Mappatura di tipo complesso in tipo primitivo utilizzando AutoMapper in C#

In questo articolo parlerò di come mappare un tipo complesso a un tipo primitivo usando AutoMapper in C# con esempi. Si prega di leggere il nostro precedente articolo in cui abbiamo discusso della Mappatura complessa di Automapper con alcuni esempi. Alla fine di questo articolo, capirai quando e come mappare il tipo complesso al tipo primitivo usando l'automapper.

Quando mappare il tipo complesso al tipo primitivo utilizzando AutoMapper in C#?

Quando una classe contiene tipi primitivi o puoi dire tipi semplici e l'altra classe contiene tipi complessi coinvolti nella mappatura, in tali scenari è necessario mappare il tipo complesso sul tipo Tipi primitivi. Vediamo come mappare il tipo complesso al tipo primitivo usando AutoMapper in C# con un esempio. In questa demo utilizzeremo le seguenti tre classi (Impiegato, Impiegato DTO e Indirizzo).

Come mostrato nell'immagine sopra, qui vogliamo mappare la proprietà complessa indirizzo della classe Dipendente alla Città, Stato e Paese proprietà di EmployeeDTO classe.

Come mappare il tipo complesso al tipo primitivo utilizzando AutoMapper in C#?

Per mappare il tipo complesso ai tipi primitivi dobbiamo usare ForMember e specificare le proprietà di origine e di destinazione. Qui, è necessario mappare le proprietà di città, stato e Paese dell'oggetto Indirizzo alle proprietà Città, stato e Paese della classe EmployeeDTO. Per fare ciò è necessario inizializzare la configurazione del Mapper come mostrato di seguito.

Come mostrato nell'immagine sopra, abbiamo mappato ogni proprietà dal tipo complesso (indirizzo ) dell'oggetto di origine (Dipendente ) alle proprietà corrispondenti dell'oggetto di destinazione (EmployeeDTO ).

Il codice completo dell'esempio precedente.
using System;
using AutoMapper;
namespace AutoMapperDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Address empAddres = new Address()
            {
                City = "Mumbai",
                State = "Maharashtra",
                Country = "India"
            };
            Employee emp = new Employee();
            emp.Name = "James";
            emp.Salary = 20000;
            emp.Department = "IT";
            emp.address = empAddres;

            var mapper =InitializeAutomapper();
            var empDTO = mapper.Map<EmployeeDTO>(emp);

            Console.WriteLine("Name:" + empDTO.Name + ", Salary:" + empDTO.Salary + ", Department:" + empDTO.Department);
            Console.WriteLine("City:" + empDTO.City + ", State:" + empDTO.State + ", Country:" + empDTO.Country);
            Console.ReadLine();
        }
        
        static Mapper InitializeAutomapper()
        {

            var config = new MapperConfiguration(cfg => {
                cfg.CreateMap<Employee, EmployeeDTO>()
               .ForMember(dest => dest.City, act => act.MapFrom(src => src.address.City))
               .ForMember(dest => dest.State, act => act.MapFrom(src => src.address.State))
               .ForMember(dest => dest.Country, act => act.MapFrom(src => src.address.Country));
            });
            
            var mapper = new Mapper(config);
            return mapper;
        }
    }

    public class Employee
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }
        public Address address { get; set; }
    }
    public class EmployeeDTO
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }

    public class Address
    {
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }
}

Ora esegui l'applicazione e vedrai l'output come previsto, come mostrato di seguito.

Mappatura di proprietà primitive su un tipo complesso utilizzando Automapper:

Ora vogliamo mappare le proprietà del tipo primitivo dell'oggetto di origine su un tipo complesso dell'oggetto di destinazione, come mostrato nell'immagine sottostante.

Come puoi vedere nell'immagine sopra, ora vogliamo mappare la Città, Stato e Paese Proprietà della fonte (Dipendente ) opporsi alla proprietà address della destinazione (EmployeeDTO ) oggetto. Per raggiungere questo obiettivo è necessario utilizzare la proiezione in AutoMapper . Quindi, devi modificare la configurazione del mappatore come mostrato di seguito.

Come puoi vedere nell'immagine sopra, proiettiamo un oggetto (Tipo di indirizzo ) utilizzando il MapForm opzione e i valori di Città, Stato e Paese provengono dall'oggetto Sorgente.

Di seguito è riportato l'esempio completo
using System;
using AutoMapper;
namespace AutoMapperDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Address empAddres = new Address()
            {
                City = "Mumbai",
                State = "Maharashtra",
                Country = "India"
            };
            Employee emp = new Employee();
            emp.Name = "James";
            emp.Salary = 20000;
            emp.Department = "IT";
            emp.City = "Mumbai";
            emp.State = "Maharashtra";
            emp.Country = "India";

            var mapper =InitializeAutomapper();
            var empDTO = mapper.Map<EmployeeDTO>(emp);

            Console.WriteLine("Name:" + empDTO.Name + ", Salary:" + empDTO.Salary + ", Department:" + empDTO.Department);
            Console.WriteLine("City:" + empDTO.address.City + ", State:" + empDTO.address.State + ", Country:" + empDTO.address.Country);
            Console.ReadLine();
        }
        
        static Mapper InitializeAutomapper()
        {

            var config = new MapperConfiguration(cfg => {
                cfg.CreateMap<Employee, EmployeeDTO>()
                .ForMember(dest => dest.address, act => act.MapFrom(src => new Address()
                {
                    City = src.City,
                    State = src.State,
                    Country = src.Country
                }));
            });
            
            var mapper = new Mapper(config);
            return mapper;
        }
    }

    public class Employee
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }
    public class EmployeeDTO
    {
        public string Name { get; set; }
        public int Salary { get; set; }
        public string Department { get; set; }
        public Address address { get; set; }
    }

    public class Address
    {
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
    }
}

Quando esegui l'applicazione, visualizzerà l'output come previsto, come mostrato di seguito.

Nel prossimo articolo parlerò di Reverse Mapping utilizzando AutoMapper in C# con esempi. Qui, in questo articolo, provo a spiegare come mappare il tipo complesso al tipo primitivo usando AutoMapper in C# e Vice Versa con esempi. Spero che questo tipo da Complesso a Tipo Primitivo usando AutoMapper nell'articolo C# ti aiuterà con le tue necessità. Mi piacerebbe avere il tuo feedback. Pubblica il tuo feedback, domanda o commenti su questo articolo.