(精华)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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.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
Python抓取哔哩哔哩up主信息:只要爬虫学的好,牢饭吃的早
2019-04-29
有个码龄5年的程序员跟我说:“他连wifi从来不用密码”
2019-04-29
领导让我整理上个季度的销售额,幸好我会Python数据分析,你猜我几点下班
2019-04-29
【Python爬虫实战】为何如此痴迷Python?还不是因为爱看小姐姐图
2019-04-29
零基础自学Python,你也可以实现经济独立!
2019-04-29
数字化转型的主干道上,华为云以“三大关键”成企业智能化推手
2019-04-29
数字化为何不走“捷”“径”?
2019-04-29
和总裁、专家交朋友,华为云助推政企智能化升级又做到前面去了
2019-04-29
BCOP章鱼船长,6月22日晚上8点上线薄饼
2019-04-29