欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在 ASP.NET Core 中使用 AutoMapper 使 Entity 和 Resource 之间进行映射

程序员文章站 2024-02-19 23:48:48
...

从 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" };
        }
    }

参考文档 :
相关标签: ASP.NET Core