使用自动映射器映射对象的问题

问题描述 投票:0回答:1

我在映射方面遇到问题。这是我的model

    public class Post
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public DateTime Created { get; set; }
        public User User { get; set; }
        public int UserId { get; set; }
    }

我的Dto:

public class PostForReturnDto
    {
        public PostForReturnDto()
        {
             Created = DateTime.Now;
        }
         public int Id { get; set; }
        public string Description { get; set; }
        public DateTime Created { get; set; }
        public string Author { get; set; }
    }

AutoMapperProfiles.cs

 CreateMap<Post, PostForReturnDto>()
            .ForMember(p => p.Author,
             opt => opt.MapFrom(src => src.User.KnownAs));

RepositoryContext

 public async Task<IEnumerable<Post>> GetPosts() {
             var posts = _context.Posts
            .Include(u => u.User)
            .OrderByDescending(p => p.Created)
            .ToListAsync();

            return await posts;
        }

在PostController中处于调试模式时,我在用户对象内部收到以下信息。

enter image description hereenter image description here

我正在尝试将KnownAs属性从User对象映射到我的DTO,但没有成功。错误是:

AutoMapper.AutoMapperMappingException:缺少类型映射配置或不支持的映射。映射类型:List1 -> PostForReturnDto System.Collections.Generic.List1 [[DateApp.API.Models.Post,DateApp.API,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]-> DateApp.API.Dtos.PostForReturnDto在lambda_method(Closure,List`1,PostForReturnDto,ResolutionContext)在lambda_method(Closure,Object,Object,ResolutionContext)在C:\ projects \ automapper \ src \ AutoMapper \ Mapper.cs:line 35中的AutoMapper.Mapper.Map [TDestination](对象源)处

c# entity-framework .net-core automapper dto
1个回答
1
投票

似乎您正在映射List<Post>实例,而不是应该映射的Post实例

尝试如下

var posts = await _repo.GetPosts();

var res = posts.Select(_ => _mapper.Map<PostToReturn>(_));

return Ok(res);

或者您可以将具有通用参数的集合映射为documentation says

IEnumerable<PostToReturn> postToReturn= mapper.Map<IEnumerable<Post>, IEnumerable<PostToReturn>>(posts);

UPD似乎您的GetPosts()实现缺少一些WhereTake过滤器。它拥有所有职位的权利,如果职位很多,则会在生产中产生性能问题。

© www.soinside.com 2019 - 2024. All rights reserved.