zoukankan      html  css  js  c++  java
  • 在 ASP.NET Core 中使用 AutoMapper 使 Entity 和 Resource 之间进行映射

    从 NuGet 安装 AutoMapper

    在使用 AutoMapper 时,核心的包是 AutoMapperAutoMapper.Extensions.Microsoft.DependencyInjection

    PM> Install-Package AutoMapper
    PM> Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection
    

    添加 Entity类 和 Resource类

    在项目添加 Post类 和 Resource类。

    	// Entity类
        public class Post
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
            public DateTime LastModified { get; set; }
        }
    	
    	// Resource类
        public class PostResource
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
            public DateTime UpdateTime { get; set; }
        }
    

    添加一个 Profile文件,配置映射关系

    随后我们需要继承Profile类来配置映射关系

    	public class MappingProfile: Profile
    	{
    		//从Post到PostResource的映射
    		CreateMap<Post, PostResource>()
    			// 对名字不同的字段配置映射
    			.ForMember(dest => dest.UpdateTime, opt => opt.MapFrom(src => src.LastModified));;
    		//从PostResource到Post的映射,此处没有对名称不同的字段进行映射
    		CreateMap<PostResource, Post>();
    	}
    

    在Startup中对AutoMapper进行注册

    在Startup类的ConfigureServices方法中进行注册

    	services.AddAutoMapper();
    

    注册以后会自动找到MappingProfile类。

    在项目中使用AutoMapper进行映射

    示例如下:

        [Route("api/[controller]")]
        [ApiController]
        public class ValuesController : ControllerBase
        {
            private readonly MyContext _myContext;
            private readonly IMapper _mapper;
    
            public ValuesController(MyContext myContext, IMapper mapper)
            {
                _myContext = myContext;
                _mapper = mapper;
            }
    
            [HttpGet]
            public ActionResult<IEnumerable<string>> Get(int id)
            {
                Post post = _myContext.Posts.Find(id);
                PostResource postResource = _mapper.Map<Post, PostResource>(post);
    
                List<Post> posts = _myContext.Posts.ToList();
                IEnumerable<PostResource> postResources = _mapper
                	.Map<IEnumerable<Post>, IEnumerable<PostResource>>(posts);
                return new string[] { "value1", "value2" };
            }
        }
    

    参考文档 :
  • 相关阅读:
    HDU 1429
    HDU 1622
    HDU 3335
    HDU 4160
    HDU 1350
    HDU 5086
    HDU 1300
    HDU 3047
    HDU 3038
    HDU 5100
  • 原文地址:https://www.cnblogs.com/MaleDeer/p/10797508.html
Copyright © 2011-2022 走看看