(精华)2020年9月21日 ASP.NET Core AutoMapper的使用
发布日期:2021-06-29 15:12:24 浏览次数:2 分类:技术文章

本文共 9515 字,大约阅读时间需要 31 分钟。

没有AutoMapper需要一个一个赋值

public class Sample01{
public static void Run() {
var result = GetStudents(); var students = new List
(); foreach (var item in result) {
var student = new StudentViewModel {
Id = item.Id, Age = item.Age, Name = item.Name, Gender = item.Gender }; students.Add(student); } Print(students); } public static List
GetStudents() {
var context = new SampleContext(); return context.Students; } public static void Print(IList
studentViewModels) {
foreach (var student in studentViewModels) {
Console.WriteLine($"Id={student.Id};Name={student.Name};"); } }}

AutoMapper配置映射

public class Sample02    {
public static void Run() {
var config = new MapperConfiguration(cfg => cfg.CreateMap
()); var mapper = config.CreateMapper(); var result = GetStudents(); var students = mapper.Map
>(result); Print(students); } public static List
GetStudents() {
var context = new SampleContext(); return context.Students; } public static void Print(IList
studentViewModels) {
foreach (var student in studentViewModels) {
Console.WriteLine($"Id={student.Id};Name={student.Name};Age={student.Age};Gender={student.Gender}"); } } }

AutoMapper 扁平化映射

public static void Run(){
var config = new MapperConfiguration(cfg => {
cfg.CreateMap
() .ForMember( model => model.City, expression => expression.MapFrom(user => user.Address.City)) .ForMember( model => model.Country, expression => expression.MapFrom(user => user.Address.Country)) .ForMember( model => model.State, expression => expression.MapFrom(user => user.Address.State)); }); var mapper = config.CreateMapper(); var result = GetUsers(); var users = mapper.Map
>(result); Print(users);}public static List
GetUsers(){
var context = new SampleContext(); return context.Users;}public static void Print(IList
userViewModels){
foreach (var user in userViewModels) {
Console.WriteLine($"Id={user.Id};Name={user.Name};City={user.City}"); }}

Profile

public class StudentProfile : Profile{
public StudentProfile() {
CreateMap
(); }}
public class UserProfile : Profile{
public UserProfile() {
CreateMap
() .ForMember( model => model.City, expression => expression.MapFrom(user => user.Address.City)) .ForMember( model => model.State, expression => expression.MapFrom(user => user.Address.State)) .ForMember( model => model.Country, expression => expression.MapFrom(user => user.Address.Country)); }}
public class Sample04{
public static void Run() {
var config = new MapperConfiguration(cfg => {
cfg.AddProfile
(); cfg.AddProfile
(); }); var mapper = config.CreateMapper(); var result = GetUsers(); var users = mapper.Map
>(result); Print(users); } public static List
GetUsers() {
var context = new SampleContext(); return context.Users; } public static void Print(IList
userViewModels) { foreach (var user in userViewModels) { Console.WriteLine($"Id={user.Id};Name={user.Name};City={user.City}"); } }}

AutoMapper 自定义解析

public class Customer{
public int Id {
get; set; } public string FirstName {
get; set; } public string LastName {
get; set; }}
public class CustomerViewModel{
public int Id {
get; set; } public string FullName {
get; set; }}
public class CustomerResolver : IValueResolver
{
public string Resolve(Customer source, CustomerViewModel destination, string destMember, ResolutionContext context) {
return source.FirstName + " " + source.LastName; }}
public static void Run(){
var config = new MapperConfiguration(cfg => {
cfg.CreateMap
() .ForMember(model => model.FullName, expression => expression.MapFrom
()); }); var mapper = config.CreateMapper(); var customer = new Customer {
Id = 1, FirstName = "Klein", LastName = "Moretti" }; var result = mapper.Map
(customer); Console.WriteLine(result.FullName);}

AutoMapper 自定义类型转换

public class Person{
public int Id {
get; set; } public string Name {
get; set; } public int Age {
get; set; }}
public class PersonViewModel{
public int Id {
get; set; } public string Name {
get; set; } public string Age {
get; set; }}
public class StringTypeConverter : ITypeConverter
{
public string Convert(int source, string destination, ResolutionContext context) {
return source.ToString(); }}
public static void Run(){
var config = new MapperConfiguration(cfg => {
cfg.CreateMap
().ConvertUsing
(); cfg.CreateMap
(); }); var mapper = config.CreateMapper(); var person = new Person {
Id = 1, Age = 10 }; var result = mapper.Map
(person); Console.WriteLine($"{result.Age.GetType()}:Age={result.Age})");}

AutoMapper 动态对象映射

public static void Run(){
var config = new MapperConfiguration(cfg => {
}); var mapper = config.CreateMapper(); var customer = new Customer {
Id = 1, FirstName = "Klein", LastName = "Moretti" }; // 强类型对象映射到动态类型对象 var result = mapper.Map
(customer); Console.WriteLine($"result:{result.FirstName} {result.LastName}"); // 动态类型对象映射到强类型对象 customer = mapper.Map
(result); Console.WriteLine($"customer:{customer.FirstName} {customer.LastName}"); // 字典对象映射到强类型对象 var dict = new Dictionary
{
{
"FirstName", "Klein"}, {
"LastName", "Moretti"}}; customer = mapper.Map
(dict); Console.WriteLine($"dictToCustomer:{customer.FirstName} {customer.LastName}");}

AutoMapper在ASP.NET Core中使用

首先安装如下两个包

AutoMapperAutoMapper.Extensions.Microsoft.DependencyInjection
public class Startup{
public Startup(IConfiguration configuration) {
Configuration = configuration; } public IConfiguration Configuration {
get; } public void ConfigureServices(IServiceCollection services) {
services.AddControllers(); services.AddSingleton
(); services.AddScoped
(); services.AddAutoMapper(Assembly.GetExecutingAssembly()); services.AddMediatR(Assembly.GetExecutingAssembly()); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => {
endpoints.MapControllers(); }); }}
public class OrderProfile : Profile    {
public OrderProfile() {
CreateMap
(); } }
public class GetOrderByIdResponseModel    {
public Guid Id {
get; set; } public DateTime DateOrder {
get; set; } public int Quantity {
get; set; } public double Amount {
get; set; } public Guid ProductId {
get; set; } public string ProductName {
get; set; } }
public class GetOrderByIdQueryHandler : IRequestHandler
{
private readonly OrderRepository _orderRepository; private readonly IMapper _mapper; public GetOrderByIdQueryHandler(OrderRepository orderRepository, IMapper mapper) {
_orderRepository = orderRepository; _mapper = mapper; } public Task
Handle(GetOrderByIdRequestModel request, CancellationToken cancellationToken) {
var order = _orderRepository.GetById(request.OrderId); var response = _mapper.Map
(order); return Task.FromResult(response); }}
[Route("api/[controller]")][ApiController]public class OrderController : ControllerBase{
private readonly IMediator _mediator; public OrderController(IMediator mediator) {
_mediator = mediator; } [HttpPost] public IActionResult MakeOrder([FromBody] MakeOrderRequestModel requestModel) {
var response = _mediator.Send(requestModel).Result; return Ok(response); } [HttpGet("{id}")] public IActionResult OrderDetails(Guid id) {
var response = _mediator.Send(new GetOrderByIdRequestModel {
OrderId = id}).Result; return Ok(response); }}

转载地址:https://codeboy.blog.csdn.net/article/details/108524490 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(精华)2020年9月20日 ASP.NET Core MediatR进程内的消息通信框架的使用
下一篇:(精华)2020年9月22日 微服务 架构演变由来(图解)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月17日 08时26分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

2020年开发运维工具清单:选择开发运维工具堆栈吧 2019-04-29
效率提升法则:高效人士不会去做的4件事 2019-04-29
8.PostgreSQL约束 2019-04-29
【技术分享】使用AES加密技术保障数据安全 2019-04-29
【应用实例】布线多?成本高?不可靠?泽耀方案没烦恼! 2019-04-29
数据可视化工具:Matplotlib绘图 2019-04-29
用Python写个超级小恐龙跑酷游戏,上班摸鱼我能玩一天 2019-04-29
闺蜜看我用Python画了一幅樱花图,吵着要我给他介绍程序员小哥哥 2019-04-29
【Python爬虫实战】知乎热榜数据采集,上班工作摸鱼两不误,知乎热门信息一网打尽 2019-04-29
自从我学会了数据挖掘Matplotlib、Numpy、Pandas、Ta-Lib等一系列库,我把领导开除了 2019-04-29
Python抓取哔哩哔哩up主信息:只要爬虫学的好,牢饭吃的早 2019-04-29
有个码龄5年的程序员跟我说:“他连wifi从来不用密码” 2019-04-29
领导让我整理上个季度的销售额,幸好我会Python数据分析,你猜我几点下班 2019-04-29
【Python爬虫实战】为何如此痴迷Python?还不是因为爱看小姐姐图 2019-04-29
零基础自学Python,你也可以实现经济独立! 2019-04-29
ElasticSearch与Mysql对比(ElasticSearch常用方法大全,持续更新) 2019-04-29
数字化转型的主干道上,华为云以“三大关键”成企业智能化推手 2019-04-29
数字化为何不走“捷”“径”? 2019-04-29
和总裁、专家交朋友,华为云助推政企智能化升级又做到前面去了 2019-04-29
BCOP章鱼船长,6月22日晚上8点上线薄饼 2019-04-29