search
HomeBackend DevelopmentC#.Net TutorialUse AutoMapper to achieve free conversion between Dto and Model (Part 1)

In actual software development projects, our "business logic" often requires us to perform various transformations on the same data. For example, a web application collects user input through the front end into Dto, and then converts the Dto into a domain model and persists it in the database. On the other hand, when the user requests data, we need to do the opposite: convert the domain model queried from the database into Dto in the opposite way and then present it to the user. Sometimes we will also face more data usage requirements, such as multiple clients using data. Each client has its own different requirements for data structure, which also requires us to perform more data conversions.
Frequent data conversion is trivial and messy. Many times we have to:
(1) The two types are almost only different in name but have similar structures. However, data transfer between types can only be achieved manually and attribute by attribute. "transmission".
(2) Every time you encounter a new data conversion scenario, you must manually implement a set of conversion logic, resulting in repeated data conversion operations that are scattered to every corner of the application.
If there is such a "Transformers"-like tool that can turn "oranges" into the "apples" we want, all we need to do is define the conversion rules - do our real business logic, or even in simple In the scenario, there is no need to define rules (Convention Over Configuration), which would be a very beautiful thing. In fact, we don't have to reinvent the wheel in .NET because we have AutoMapper, a powerful Object-Object Mapping tool.
Okay, I admit that I am a little excited. In fact, the project I am working on is experiencing the above "confusion", and AutoMapper really brings me a bright feeling. Therefore, I spent a little weekend break to try out AutoMapper. I realized the mapping of Dto to domain model through small application scenarios, and I really felt its "powerful aura". I will share my experience in using it in the article, hoping to bring some help to you who are also confused. I will release the complete project code to my git repository later. Everyone is welcome to refer to it freely.
【1】Application Scenario Description
First, let’s take a look at our “virtual” domain model. This time I defined a bookstore (BookStore):

C# code

public class BookStore

{

public string Name { get; set; }

public List Books { get; set; }

Public Address Address {get; set;}

}


The bookstore has its own address (Address):

C# code

public class Address

{

public string Country { get; set; }

public string City { get; set; }

public string Street { get; set; }

public string PostCode { get; set; }

}


At the same time, there are n books (Books) in the bookstore:

C# code

public class Book

{

public string Title { get; set; }

public string Description { get; set; }

public string Language { get; set; }

public decimal Price { get; set; }

public List Authors { get; set; }

public DateTime? PublishDate { get; set; }

public Publisher Publisher { get; set; }

public int? Paperback { get; set; }

}


Each book has publisher information (Publisher):

C# code

public class Publisher

{

public string Name { get; set; }

}


Each book can have up to 2 author information (Author):

C# code

public class Author

{

public string Name { get; set; }

public string Description { get; set; }

public ContactInfo ContactInfo { get; set; }

}


Each author has his own contact information (ContactInfo):

C# code

public class ContactInfo

{

public string Email { get; set; }

public string Blog { get; set; }

public string Twitter { get; set; }

}


That’s pretty much it, one with levels Structural domain model.
Let’s take a look at our Dto structure again.
In Dto we have BookStoreDto corresponding to BookStore:

C# code

public class BookStoreDto

{

public string Name { get; set; }

public List

Public AddressDto Address { get; set; }

}


which contains the AddressDto corresponding to Address:

C# code

public class AddressDto

{

public string Country { get; set; }

public string City { get; set; }

public string Street { get; set; }

public string PostCode { get; set; }

}


and BookDto corresponding to Book:

C# Code

public class BookDto

{

public string Title { get; set; }

public string Description { get; set; }

public string Language { get; set ; }

public decimal Price { get; set; }

public DateTime? PublishDate { get; set; }

public string Publisher { get; set; }

public int? Paperback { get; set; }

public string FirstAuthorName { get; set; }

public string FirstAuthorDescription { get; set; }

public string FirstAuthorEmail { get; set; }

public string FirstAuthorBlog { get; set; }

public string FirstAuthorTwitter { get; set; }

public string SecondAuthorName { get ; set; }

public string SecondAuthorDescription { get; set; }

public string SecondAuthorEmail { get; set; }

public string SecondAuthorBlog { get; set; }

public string SecondAuthorTwitter { get; set; }

}


Notice that our BookDto "flattens" the hierarchical structure of the entire Book. A BookDto carries the data of the Book and all its Author, Publisher and other modes.
It’s time for us to take a look at the mapping rules from Dto to Model.
(1) BookStoreDto -> Fields in BookStore

BookStoreDto Fields in BookStore

Name Name

Books Books

Address Address


(2)AddressDto -> Address

Fields in AddressDto Fields in Address

Country

City

City

🎜Street 🎜

PostCode PostCode


(3) BookDto -> Book.
Some basic fields in BookDto can directly correspond to fields in Book.

Fields in BookDto Fields in Book

Title Title

Description Description

Language Language

Price Price

Pub lishDate PublishDate

Paperback Paperback


Each book has at most 2 authors, in BookDto They are represented by fields prefixed with "First" and "Second" respectively. Therefore, all FirstXXX fields will be mapped to the first Author object in Book's Authors, and all SecondXXX fields will be mapped to the second Author object in Authors.

Fields in BookDto Fields in the 1st Author object in Authors in Book

FirstAuthorName Name

FirstAuthorDescription Description

FirstAuthorEmail ContactInfo.Email

FirstAuthorBlog ContactInfo.Blog

FirstAuthorTwitter ContactInfo.Twitter


Note that ContactInfo.Email in the above table represents the Email field corresponding to the ContactInfo of the Author object, and so on. Similarly we have:

Fields in BookDto Fields in the second Author object in Authors in Book

SecondAuthorName Name

SecondAuthorDescription Description

SecondAuthorEmail ContactIn fo.Email

SecondAuthorBlog ContactInfo.Blog

SecondAuthorTwitter ContactInfo .Twitter


Finally there is the Publisher field, which will correspond to an independent Publisher object.

Fields in BookDto Fields in Publisher

Publisher Name


That’s it. Our need is to convert data from this big Dto to another big Model.


Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
From Web to Desktop: The Versatility of C# .NETFrom Web to Desktop: The Versatility of C# .NETApr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# .NET and the Future: Adapting to New TechnologiesC# .NET and the Future: Adapting to New TechnologiesApr 14, 2025 am 12:06 AM

C# and .NET adapt to the needs of emerging technologies through continuous updates and optimizations. 1) C# 9.0 and .NET5 introduce record type and performance optimization. 2) .NETCore enhances cloud native and containerized support. 3) ASP.NETCore integrates with modern web technologies. 4) ML.NET supports machine learning and artificial intelligence. 5) Asynchronous programming and best practices improve performance.

Is C# .NET Right for You? Evaluating its ApplicabilityIs C# .NET Right for You? Evaluating its ApplicabilityApr 13, 2025 am 12:03 AM

C#.NETissuitableforenterprise-levelapplicationswithintheMicrosoftecosystemduetoitsstrongtyping,richlibraries,androbustperformance.However,itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical,wherelanguageslikeRustorGomightbepreferable.

C# Code within .NET: Exploring the Programming ProcessC# Code within .NET: Exploring the Programming ProcessApr 12, 2025 am 12:02 AM

The programming process of C# in .NET includes the following steps: 1) writing C# code, 2) compiling into an intermediate language (IL), and 3) executing by the .NET runtime (CLR). The advantages of C# in .NET are its modern syntax, powerful type system and tight integration with the .NET framework, suitable for various development scenarios from desktop applications to web services.

C# .NET: Exploring Core Concepts and Programming FundamentalsC# .NET: Exploring Core Concepts and Programming FundamentalsApr 10, 2025 am 09:32 AM

C# is a modern, object-oriented programming language developed by Microsoft and as part of the .NET framework. 1.C# supports object-oriented programming (OOP), including encapsulation, inheritance and polymorphism. 2. Asynchronous programming in C# is implemented through async and await keywords to improve application responsiveness. 3. Use LINQ to process data collections concisely. 4. Common errors include null reference exceptions and index out-of-range exceptions. Debugging skills include using a debugger and exception handling. 5. Performance optimization includes using StringBuilder and avoiding unnecessary packing and unboxing.

Testing C# .NET Applications: Unit, Integration, and End-to-End TestingTesting C# .NET Applications: Unit, Integration, and End-to-End TestingApr 09, 2025 am 12:04 AM

Testing strategies for C#.NET applications include unit testing, integration testing, and end-to-end testing. 1. Unit testing ensures that the minimum unit of the code works independently, using the MSTest, NUnit or xUnit framework. 2. Integrated tests verify the functions of multiple units combined, commonly used simulated data and external services. 3. End-to-end testing simulates the user's complete operation process, and Selenium is usually used for automated testing.

Advanced C# .NET Tutorial: Ace Your Next Senior Developer InterviewAdvanced C# .NET Tutorial: Ace Your Next Senior Developer InterviewApr 08, 2025 am 12:06 AM

Interview with C# senior developer requires mastering core knowledge such as asynchronous programming, LINQ, and internal working principles of .NET frameworks. 1. Asynchronous programming simplifies operations through async and await to improve application responsiveness. 2.LINQ operates data in SQL style and pay attention to performance. 3. The CLR of the NET framework manages memory, and garbage collection needs to be used with caution.

C# .NET Interview Questions & Answers: Level Up Your ExpertiseC# .NET Interview Questions & Answers: Level Up Your ExpertiseApr 07, 2025 am 12:01 AM

C#.NET interview questions and answers include basic knowledge, core concepts, and advanced usage. 1) Basic knowledge: C# is an object-oriented language developed by Microsoft and is mainly used in the .NET framework. 2) Core concepts: Delegation and events allow dynamic binding methods, and LINQ provides powerful query functions. 3) Advanced usage: Asynchronous programming improves responsiveness, and expression trees are used for dynamic code construction.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment