Προγραμματισμός

Πώς να εργαστείτε με το AutoMapper στο C #

Το AutoMapper είναι μια δημοφιλής βιβλιοθήκη αντιστοίχισης αντικειμένων προς αντικείμενο που μπορεί να χρησιμοποιηθεί για τη χαρτογράφηση αντικειμένων που ανήκουν σε διαφορετικούς τύπους. Για παράδειγμα, ίσως χρειαστεί να αντιστοιχίσετε τα DTO (Αντικείμενα μεταφοράς δεδομένων) στην εφαρμογή σας στα αντικείμενα του μοντέλου. Το AutoMapper σας εξοικονομεί την κουραστική προσπάθεια να χαρτογραφήσετε με μη αυτόματο τρόπο μία ή περισσότερες ιδιότητες τέτοιων ασύμβατων τύπων.

Για να ξεκινήσετε να εργάζεστε με το AutoMapper, θα πρέπει να δημιουργήσετε ένα έργο στο Visual Studio και, στη συνέχεια, να εγκαταστήσετε το AutoMapper. Μπορείτε να εγκαταστήσετε το AutoMapper από το NuGet χρησιμοποιώντας την ακόλουθη εντολή στο παράθυρο NuGet Package Manager Console:

PM> AutoMapper εγκατάστασης-πακέτου

Δημιουργήστε αντιστοιχίσεις χρησιμοποιώντας το AutoMapper

Ένας χάρτης αντικειμένου-προς-αντικείμενο, όπως το AutoMapper μετατρέπει ένα αντικείμενο εισόδου ενός τύπου σε ένα αντικείμενο εξόδου άλλου τύπου. Εξετάστε τις ακόλουθες δύο τάξεις.

 δημόσια τάξη AuthorModel

    {

public int Id

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά FirstName

        {

ετοιμάσου;

        }

δημόσια συμβολοσειρά LastName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά Διεύθυνση

        {

παίρνω; σειρά;

        }

    }

δημόσια τάξη AuthorDTO

    {

public int Id

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά FirstName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά LastName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά Διεύθυνση

        {

παίρνω; σειρά;

        }

    }

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να δημιουργήσετε έναν χάρτη μεταξύ αυτών των δύο τύπων, AuthorModel και AuthorDTO.

var config = νέο MapperConfiguration (cfg => {

cfg.CreateMap ();

            });

Στη συνέχεια, η εκτέλεση της αντιστοίχισης μεταξύ των τύπων είναι τόσο απλή όσο δείχνει το ακόλουθο κομμάτι κώδικα.

IMapper iMapper = config.CreateMapper ();

var source = νέο AuthorModel ();

var destination = iMapper.Map (πηγή);

Ένα παράδειγμα αυτόματης χαρτογράφησης

Ας εργαστούμε τώρα με ορισμένα δεδομένα. Ανατρέξτε στο ακόλουθο κομμάτι κώδικα που αποθηκεύει ορισμένα δεδομένα στο αντικείμενο προέλευσης και, στη συνέχεια, εμφανίζει τις τιμές ιδιοτήτων στο αντικείμενο προορισμού μετά την ολοκλήρωση της αντιστοίχισης.

var config = νέο MapperConfiguration (cfg => {

cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var source = νέο AuthorModel ();

πηγή.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "Ινδία";

var destination = iMapper.Map (πηγή);

Console.WriteLine ("Όνομα συγγραφέα:" + destination.FirstName + "" + destination.LastName);

Όταν εκτελέσετε το παραπάνω κομμάτι κώδικα, θα εμφανιστεί το όνομα συγγραφέα που είναι αποθηκευμένο μέσα στο αντικείμενο προορισμού. Ωστόσο, οι τιμές των ιδιοτήτων προορισμού FirstName και προορισμού LastName θα είναι ίδιες με το αντικείμενο προέλευσης, επειδή έχετε αντιστοιχίσει με επιτυχία τα αντικείμενα χρησιμοποιώντας το AutoMapper!

Σημειώστε ότι το AutoMapper μπορεί να χαρτογραφήσει οποιοδήποτε σύνολο τάξεων. Ωστόσο, το AutoMapper ακολουθεί ορισμένες συμβάσεις, μία εκ των οποίων είναι ότι τα ονόματα ιδιοτήτων που χαρτογραφούνται πρέπει να έχουν πανομοιότυπα ονόματα. Εάν τα ονόματα των ιδιοτήτων δεν είναι πανομοιότυπα, τότε πρέπει να ενημερώσετε το AutoMapper πώς πρέπει να αντιστοιχιστούν οι ιδιότητες. Υποθέτοντας ότι θέλουμε να χαρτογραφήσουμε τις δύο ιδιότητες Contact and ContactDetails, το ακόλουθο παράδειγμα δείχνει πώς μπορεί να επιτευχθεί αυτό.

var config = νέο MapperConfiguration (cfg => {

cfg.CreateMap ()

.ForMember (προορισμός => destination.ContactDetails,

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

            });

Σημειώστε την ακόλουθη δήλωση που χρησιμοποιείται για τη δημιουργία του αντικειμένου προορισμού.

var destination = iMapper.Map (πηγή);

Εάν το αντικείμενο προορισμού υπάρχει ήδη, μπορείτε να χρησιμοποιήσετε την παρακάτω δήλωση.

iMapper.Map (sourceObject, destinationObject);

Στην ουσία, το παραπάνω απόσπασμα κώδικα μπορεί να χρησιμοποιηθεί για τη χαρτογράφηση δύο αντικειμένων που υπάρχουν ήδη.

Χρήση προβολών στο AutoMapper

Το AutoMapper παρέχει εξαιρετική υποστήριξη για προβολές. Οι προβολές χρησιμοποιούνται για τη χαρτογράφηση των τιμών πηγής σε έναν προορισμό που δεν ταιριάζει με τη δομή της πηγής. (Αντίθετα, η χαρτογράφηση που συζητήσαμε παραπάνω ήταν αντιστοίχιση ένας προς έναν.)

Ας δούμε τώρα μια προβολή. Για παράδειγμα, εξετάστε την ακόλουθη τάξη.

 δημόσια τάξη Διεύθυνση

    {

δημόσια συμβολοσειρά City {get; σειρά; }

δημόσια συμβολοσειρά State {get; σειρά; }

δημόσια συμβολοσειρά Χώρα {get; σειρά; }

    }

Ας ζητήσουμε από την τάξη AuthorModel να χρησιμοποιήσει την κλάση διευθύνσεων για να αποθηκεύσει πληροφορίες διεύθυνσης των συγγραφέων. Εδώ θα είναι το ενημερωμένο μάθημα AuthorModel.

 δημόσια τάξη AuthorModel

    {

public int Id

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά FirstName

        {

ετοιμάσου;

        }

δημόσια συμβολοσειρά LastName

        {

παίρνω; σειρά;

        }

δημόσια διεύθυνση Διεύθυνση

        {

παίρνω; σειρά;

        }

    }

Και εδώ είναι η ενημερωμένη τάξη AuthorDTO.

δημόσια τάξη AuthorDTO

    {

public int Id

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά FirstName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά LastName

        {

παίρνω; σειρά;

        }

δημόσια συμβολοσειρά City {get; σειρά; }

δημόσια συμβολοσειρά State {get; σειρά; }

δημόσια συμβολοσειρά Χώρα {get; σειρά; }

    }

Ας υποθέσουμε ότι πρέπει να χαρτογραφήσουμε τις τάξεις AuthorDTO και AuthorModel. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορεί να επιτευχθεί αυτό.

var config = νέο MapperConfiguration (cfg => {

cfg.CreateMap ()

.ForMember (προορισμός => destination.Address,

map => map.MapFrom (

πηγή => νέα διεύθυνση

                  {

Πόλη = πηγή. Πόλη,

Κατάσταση = πηγή. Κράτος,

Χώρα = πηγή. Χώρα

                  }));

Θα συζητήσω τις πιο προηγμένες δυνατότητες του AutoMapper σε μια μελλοντική ανάρτηση εδώ. Μέχρι τότε, μπορείτε να μάθετε περισσότερα για το AutoMapper σε αυτόν τον σύνδεσμο.

Πώς να κάνετε περισσότερα στο C #:

  • Πότε να χρησιμοποιήσετε μια αφηρημένη τάξη εναντίον διεπαφής στο C #
  • Πώς να εργαστείτε με το AutoMapper στο C #
  • Πώς να χρησιμοποιήσετε τις εκφράσεις λάμδα στο C #
  • Πώς να συνεργαστείτε με τους αντιπροσώπους Action, Func και Predicate στο C #
  • Πώς να συνεργαστείτε με εκπροσώπους στο C #
  • Πώς να εφαρμόσετε έναν απλό καταγραφέα στο C #
  • Πώς να εργαστείτε με χαρακτηριστικά στο C #
  • Πώς να εργαστείτε με το log4net στο C #
  • Πώς να εφαρμόσετε το μοτίβο σχεδίασης αποθετηρίου στο C #
  • Πώς να εργαστείτε με προβληματισμό στο C #
  • Πώς να εργαστείτε με το σύστημα παρακολούθησης αρχείων στο C #
  • Πώς να εκτελέσετε τεμπέλης αρχικοποίηση στο C #
  • Πώς να εργαστείτε με το MSMQ στο C #
  • Πώς να εργαστείτε με μεθόδους επέκτασης στο C #
  • Πώς να μας εκφράσεις λάμδα στο C #
  • Πότε να χρησιμοποιήσετε την ευμετάβλητη λέξη-κλειδί στο C #
  • Πώς να χρησιμοποιήσετε τη λέξη-κλειδί απόδοσης στο C #
  • Πώς να εφαρμόσετε τον πολυμορφισμό στο C #
  • Πώς να δημιουργήσετε τον δικό σας προγραμματιστή εργασιών στο C #
  • Πώς να εργαστείτε με το RabbitMQ στο C #
  • Πώς να εργαστείτε με μια πλειάδα στο C #
  • Εξερεύνηση εικονικών και αφηρημένων μεθόδων στο C #