UseValue ResolveUso e sostituzione Null in AutoMapper

UseValue ResolveUso e sostituzione Null in AutoMapper

UseValue ResolveUsing e Null Substitution in AutoMapper

In questo articolo parlerò di UseValue ResolveUsing e Null Substitution in AutoMapper con esempi. Si prega di leggere il nostro articolo precedente in cui abbiamo discusso della Proprietà Ignora di AutoMapper in C# con alcuni esempi.

Capire l'AutoMapper Metodi UseValue() e ResolveUsing()

Il metodo AutoMapper UseValue() viene utilizzato per recuperare un valore alla prima esecuzione e lo memorizza nella mappatura mentre il metodo ResolveUsing() viene risolto in fase di esecuzione.

Comprendiamo l'AutoMapper di cui sopra  UseValue() e ResolveUsing()  metodi con un esempio
using AutoMapper;
namespace AutoMapperDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            InitializeAutomapper();

            A aObj = new A()
            {
                Name = "Pranaya",
                AAddress = "Mumbai"
            };

            var bObj = Mapper.Map<A, B>(aObj);
            Console.WriteLine("After Mapping : ");

            //Here FixedValue and DOJ will be empty for aObj
            Console.WriteLine("aObj.Member : " + aObj.Name + ", aObj.FixedValue : " + aObj.FixedValue + ", aObj.DOJ : " + aObj.DOJ + ", aObj.AAddress : " + aObj.AAddress);
            Console.WriteLine("bObj.Member : " + bObj.Name + ", bObj.FixedValue : " + bObj.FixedValue + ", bObj.DOJ : " + bObj.DOJ + ", bObj.BAddress : " + bObj.BAddress);
            
            bObj.Name = "Rout";
            bObj.BAddress = "Delhi";
            Mapper.Map(bObj, aObj);

            Console.WriteLine("After ReverseMap : ");
            Console.WriteLine("aObj.Member : " + aObj.Name + ", aObj.FixedValue : " + aObj.FixedValue + ", aObj.DOJ : " + aObj.DOJ + ", aObj.AAddress : " + aObj.AAddress);
            Console.WriteLine("bObj.Member : " + bObj.Name + ", bObj.FixedValue : " + bObj.FixedValue + ", bObj.DOJ : " + bObj.DOJ + ", bObj.BAddress : " + bObj.BAddress);

            Console.ReadLine();
        }

        static void InitializeAutomapper()
        {
            Mapper.Initialize(config =>
            {
                config.CreateMap<A, B>()
                    .ForMember(dest => dest.BAddress, act => act.MapFrom(src => src.AAddress))

                    //To Store Static Value use the UseValue() method
                    .ForMember(dest => dest.FixedValue, act => act.UseValue("Hello"))

                    //To Store DateTime value use ResolveUsing() method
                    .ForMember(dest => dest.DOJ, act => act.ResolveUsing(src =>
                    {
                        return DateTime.Now;
                    }))

                    .ReverseMap();
            });
        }
    }

    public class A
    {
        public string Name { get; set; }
        public string AAddress { get; set; }
        public string FixedValue { get; set; }
        public DateTime DOJ { get; set; }
    }

    public class B
    {
        public string Name { get; set; }
        public string BAddress { get; set; }
        public string FixedValue { get; set; }
        public DateTime DOJ { get; set; }
    }
}

Quando esegui l'applicazione, ti dà l'output seguente.

Nota: Usa MapFrom(s => s.MemberName) quando restituisci il membro dell'oggetto di origine effettivo mentre devi utilizzare UseValue() metodo se vuoi mappare un valore statico nella mappatura e sai che il valore stesso non cambierà.

Usa ResolveUsing(s => {}) quando si desidera risolvere un campo di destinazione da un valore derivato. Questo dovrebbe essere usato per qualsiasi mappatura DateTime e qualsiasi funzione di mappatura più complicata.

Sostituzione nulla in Automapper:

La sostituzione Null ci consente di fornire un valore alternativo per un membro di destinazione se il valore di origine è nullo. Ciò significa che invece di mappare il valore nullo dall'oggetto di origine, verrà mappato dal valore che forniamo. Dobbiamo usare NullSubstitute() metodo per sostituire il valore null utilizzando AutoMapper.

Capiamo come usare la sostituzione Null usando AutoMapper con un esempio

using AutoMapper;
namespace AutoMapperDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            InitializeAutomapper();

            A aObj = new A()
            {
                Name = "Pranaya",
                AAddress = null
            };

            var bObj = Mapper.Map<A, B>(aObj);
            Console.WriteLine("After Mapping : ");

            //Here FixedValue and DOJ will be empty for aObj
            Console.WriteLine("aObj.Member : " + aObj.Name + ", aObj.FixedValue : " + aObj.FixedValue + ", aObj.AAddress : " + aObj.AAddress);
            Console.WriteLine("bObj.Member : " + bObj.Name + ", bObj.FixedValue : " + bObj.FixedValue + ", bObj.BAddress : " + bObj.BAddress);

            Console.ReadLine();
        }

        static void InitializeAutomapper()
        {
            Mapper.Initialize(config =>
            {
                config.CreateMap<A, B>()
                    .ForMember(dest => dest.BAddress, act => act.MapFrom(src => src.AAddress))
                    //You need to use NullSubstitute method to substitute null value
                    .ForMember(dest => dest.FixedValue, act => act.NullSubstitute("Hello"))
                    .ForMember(dest => dest.BAddress, act => act.NullSubstitute("N/A"));
            });
        }
    }

    public class A
    {
        public string Name { get; set; }
        public string AAddress { get; set; }
        public string FixedValue { get; set; }
    }

    public class B
    {
        public string Name { get; set; }
        public string BAddress { get; set; }
        public string FixedValue { get; set; }
    }
}

Quando eseguiamo l'applicazione, ci darà l'output seguente.

In questo articolo, provo a spiegare UseValue ResolveUsing e Null Substitution usando AutoMapper in C# con alcuni esempi. Spero che questo articolo ti aiuti con la tua esigenza. Mi piacerebbe avere il tuo feedback. Pubblica il tuo feedback, domanda o commenti su questo articolo.


No