目錄
從 NuGet 安裝 AutoMapper
在使用 AutoMapper 時,核心的包是 AutoMapper 和 AutoMapper.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" };
}
}
- 參考文檔 :