c# - 如何在 .Net Core 的 Web Api 中使用 AutoMapper?
问题描述
目前,我有这个 Web Api 方法,它手动将我的实体映射到 DTO 对象,它可以正常工作。现在,我想实现我已经安装在ConfigureServices
方法中注册的 AutoMapper,并在我的 Web Api 控制器构造函数中创建了 AutoMapper 配置文件类并注入了 automapper。
这是我没有 AutoMapper 的手动映射
[HttpGet]
public async Task<ActionResult<IEnumerable<MovieDto>>> GetMovies()
{
//manual mapping which can be replaced with Automapper
var movies = (from m in _context.Movies
select new MovieDto()
{
Id = m.Id,
MovieTitle = m.MovieTitle,
ReleaseDate = m.ReleaseDate,
MovieStatus = m.MovieStatus,
PhotoFile = m.PhotoFile
}).ToListAsync();
return await movies;
}
这就是我尝试添加自动映射器以替换手动映射的方式。
[HttpGet]
public async Task<ActionResult<IEnumerable<MovieDto>>> GetMovies()
{
return _mapper.Map<IEnumerable<MovieDto>>(_context.Movies);
}
但是,它遇到错误Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<CinemaApp.NETCore31.WebAPI.Models.MovieDto>' to 'Microsoft.AspNetCore.Mvc.ActionResult<System.Collections.Generic.IEnumerable<CinemaApp.NETCore31.WebAPI.Models.MovieDto>>'
解决方案
您将需要创建一个配置文件并映射您想要执行的所有转换。您不必逐个字段进行此操作,只要名称相同,就可以让 AutoMapper 弄清楚。
这似乎是一个很好的教程: https ://code-maze.com/automapper-net-core/
首先在AutoMapper中创建一个继承自Profile类的类
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Movie, MovieDto>();
}
}
请注意,如果您想映射 fromMovieDto
到Movie
,则必须创建第二CreateMap
行。
在您的Startup.cs
类中,您需要注册 Automapper,这将自动扫描程序集中使用以下代码定义 Startup 类的所有配置文件:
public void ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper(typeof(Startup));
}
推荐阅读
- regex - 使用正则表达式查找方程的截距
- python - 使用 Pandas 和 XLSXWriter 在 Excel 工作表中创建表格
- teamcity - 分支规范问题(构建是在分支 XXX 中触发的,它与构建 VCS 根监控的任何分支都不对应)
- javascript - Angular - 类型“{}”缺少类型“任何 []”中的以下属性
- python-3.x - Unable to joint two geopandas data framesm due to 'rtree' error
- r - R:绘制条形图
- docker - Cannot access to secrets .net core with Docker
- oracle - Oracle GoldenGate dblogin failed with GGSIC : no OCI environment handle created
- dafny - 为什么这个前提条件会失败,我不太明白
- vba - Word VBA Rest API Simplybook.me 获得 401 未经授权