Bagaimana bekerja dengan AutoMapper di C #

AutoMapper adalah pustaka pemetaan objek-ke-objek populer yang dapat digunakan untuk memetakan objek yang termasuk dalam tipe yang berbeda. Sebagai contoh, Anda mungkin perlu memetakan DTO (Data Transfer Objects) di aplikasi Anda ke objek model. AutoMapper menghemat usaha yang membosankan karena harus memetakan secara manual satu atau beberapa properti dari jenis yang tidak kompatibel tersebut.

Untuk mulai bekerja dengan AutoMapper, Anda harus membuat proyek di Visual Studio dan kemudian menginstal AutoMapper. Anda dapat menginstal AutoMapper dari NuGet menggunakan perintah berikut di jendela Konsol Pengelola Paket NuGet:

PM> Instal-Paket AutoMapper

Buat pemetaan menggunakan AutoMapper

Pemeta objek-ke-objek seperti AutoMapper mengonversi objek input dari satu jenis menjadi objek output jenis lain. Pertimbangkan dua kelas berikut.

 kelas publik AuthorModel

    {

        public int Id

        {

            Dapatkan; set;

        }

        string publik FirstName

        {

            dapatkan; set;

        }

        string publik LastName

        {

            Dapatkan; set;

        }

        Alamat string publik

        {

            Dapatkan; set;

        }

    }

 kelas publik AuthorDTO

    {

        public int Id

        {

            Dapatkan; set;

        }

        string publik FirstName

        {

            Dapatkan; set;

        }

        string publik LastName

        {

            Dapatkan; set;

        }

        Alamat string publik

        {

            Dapatkan; set;

        }

    }

Cuplikan kode berikut menunjukkan bagaimana Anda dapat membuat peta di antara dua jenis ini, AuthorModel dan AuthorDTO.

var config = MapperConfiguration baru (cfg => {

                cfg.CreateMap ();

            });

Kemudian untuk melakukan pemetaan antara tipe sesederhana yang ditunjukkan oleh potongan kode berikut.

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

var destination = iMapper.Map (sumber);

Contoh AutoMapper 

Sekarang mari bekerja dengan beberapa data. Lihat bagian kode berikut yang menyimpan beberapa data ke dalam objek sumber dan kemudian menampilkan nilai properti di objek tujuan setelah pemetaan selesai.

var config = MapperConfiguration baru (cfg => {

                cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

source.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "India";

var destination = iMapper.Map (sumber);

Console.WriteLine ("Nama Penulis:" + destination.FirstName + "" + destination.LastName);

Saat Anda mengeksekusi potongan kode di atas, nama penulis yang disimpan di dalam objek tujuan akan ditampilkan. Namun, nilai properti NamaDepan dan NamaBelakang tujuan akan sama dengan objek sumber karena Anda telah berhasil memetakan objek menggunakan AutoMapper!

Perhatikan bahwa AutoMapper dapat memetakan semua kelas. Namun, AutoMapper mengikuti konvensi tertentu, salah satunya adalah bahwa nama properti yang dipetakan harus memiliki nama yang identik. Jika nama properti tidak identik, Anda harus memberi tahu AutoMapper bagaimana properti harus dipetakan. Dengan asumsi kita ingin memetakan dua properti Contact dan ContactDetails, contoh berikut mengilustrasikan bagaimana hal ini dapat dicapai.

var config = MapperConfiguration baru (cfg => {

                cfg.CreateMap ()

                .ForMember (tujuan => tujuan.ContactDetails,

               opts => opts.MapFrom (source => source.Contact));

            });

Perhatikan pernyataan berikut yang digunakan untuk membuat objek tujuan.

var destination = iMapper.Map (sumber);

Jika objek tujuan sudah ada, Anda dapat menggunakan pernyataan di bawah ini.

iMapper.Map (sourceObject, destinationObject);

Intinya, potongan kode di atas bisa digunakan untuk memetakan dua objek yang sudah ada.

Menggunakan proyeksi di AutoMapper

AutoMapper memberikan dukungan luar biasa untuk proyeksi. Proyeksi digunakan untuk memetakan nilai sumber ke tujuan yang tidak sesuai dengan struktur sumber. (Sebaliknya, pemetaan yang kita diskusikan di atas adalah pemetaan satu-ke-satu.)

Sekarang mari kita lihat proyeksi. Misalnya, pertimbangkan kelas berikut.

 Alamat kelas publik

    {

        public string City {get; set; }

        public string State {get; set; }

        string publik Negara {get; set; }

    }

Mari kita minta kelas AuthorModel kita menggunakan kelas Alamat untuk menyimpan informasi alamat penulis. Seperti inilah tampilan kelas AuthorModel yang diperbarui.

 kelas publik AuthorModel

    {

        public int Id

        {

            Dapatkan; set;

        }

        string publik FirstName

        {

            dapatkan; set;

        }

        string publik LastName

        {

            Dapatkan; set;

        }

        Alamat Alamat publik

        {

            Dapatkan; set;

        }

    }

 Dan inilah kelas AuthorDTO yang diperbarui.

kelas publik AuthorDTO

    {

        public int Id

        {

            Dapatkan; set;

        }

        string publik FirstName

        {

            Dapatkan; set;

        }

        string publik LastName

        {

            Dapatkan; set;

        }

        public string City {get; set; }

        public string State {get; set; }

        string publik Negara {get; set; }

    }

Sekarang misalkan kita perlu memetakan kelas AuthorDTO dan AuthorModel. Potongan kode berikut menggambarkan bagaimana hal ini dapat dicapai.

var config = MapperConfiguration baru (cfg => {

                cfg.CreateMap ()

                   .ForMember (tujuan => alamat tujuan,

              map => map.MapFrom (

                  sumber => Alamat baru

                  {

                      Kota = sumber. Kota,

                      State = source .State,

                      Country = source.Country

                  }));

Saya akan membahas fitur-fitur yang lebih canggih dari AutoMapper di posting mendatang di sini. Sampai saat itu, Anda dapat mempelajari lebih lanjut tentang AutoMapper di tautan ini.

Bagaimana melakukan lebih banyak di C #:

  • Kapan menggunakan kelas abstrak vs. antarmuka di C #
  • Bagaimana bekerja dengan AutoMapper di C #
  • Cara menggunakan ekspresi lambda di C #
  • Cara bekerja dengan delegasi Action, Func, dan Predicate di C #
  • Bagaimana bekerja dengan delegasi di C #
  • Bagaimana menerapkan logger sederhana di C #
  • Bagaimana bekerja dengan atribut di C #
  • Bagaimana bekerja dengan log4net di C #
  • Bagaimana menerapkan pola desain repositori di C #
  • Bagaimana bekerja dengan refleksi di C #
  • Bagaimana bekerja dengan filesystemwatcher di C #
  • Bagaimana melakukan inisialisasi malas di C #
  • Bagaimana bekerja dengan MSMQ di C #
  • Bagaimana bekerja dengan metode ekstensi di C #
  • Bagaimana kami ekspresi lambda di C #
  • Kapan menggunakan kata kunci volatile di C #
  • Cara menggunakan kata kunci hasil di C #
  • Bagaimana menerapkan polimorfisme di C #
  • Cara membuat penjadwal tugas Anda sendiri di C #
  • Bagaimana bekerja dengan RabbitMQ di C #
  • Bagaimana bekerja dengan tupel di C #
  • Menjelajahi metode virtual dan abstrak di C #