我在.Net的业务层实现了Automapper。这些方法是异步任务。方法GetAllMovies()编译AddMovie没有的位置。我需要在将Dto传递给服务方法之前将其转换为实体。我该怎么做呢
方法
public async Task<long> AddMovie(MoviesDto movie)
{
return await _movieService.AddMovie(movie);
}
public async Task<IEnumerable<MoviesDto>> GetAllMovies()
{
var movies = await _movieService.GetMovies();
return Mapper.Map<List<MoviesDto>>(movies);
}
电影服务
public class MovieService : IMovieService
{
IUnitOfWork _unitOfWork;
public MovieService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public async Task<long> AddMovie(Movie movie)
{
return await _unitOfWork.movieRepository.AddMovie(movie);
}
public async Task<IEnumerable<Movie>> GetMovies()
{
return await _unitOfWork.movieRepository.GetMovies();
}
}
AutoMapper
public class DomainToDtoMapping : Profile
{
public DomainToDtoMapping()
{
CreateMap<BaseEntity, BaseDto>().ReverseMap();
CreateMap<Movie, MoviesDto>().ReverseMap();
}
}
StructureMap
public DefaultRegistry()
{
Scan(
scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
//For<IExample>().Use<Example>();
For<IConnectionFactory>().Use<ConnectionFactory>();
//For<IMovieRepository>().Use<MovieRepository>().Ctor<FileInfo>().Is(myFile);
For<IUnitOfWork>().Use<UnitOfWork>();
For<IMovieService>().Use<MovieService>();
For<IMovieBusiness>().Use<MovieBusiness>();
}
答案 0 :(得分:1)
您错过了发布一些代码:
AutoMapper.Initialize
设置如果MovieDbo
(或调用任何数据库类)没有引用任何其他数据库对象(通过导航属性),则可以在适当配置后调用Mapper.Map<MovieDbo>(movie)
。
当您的DBO具有导航属性时,它变得越来越复杂,使用new
创建常规对象可以避免很多麻烦。
试试这个。就像我说的那样,如果Movie
没有任何导航属性,那就不会有任何问题。如果确实如此,只需创建一个新实例并手动映射属性。
public async Task<long> AddMovie(MoviesDto movie)
{
return await _movieService.AddMovie(AutoMapper.Map<Movie>(movie));
}