【问题标题】:Problem with mapping objects with automapper使用自动映射器映射对象的问题
【发布时间】:2020-07-05 21:35:09
【问题描述】:

我的映射有问题。这是我的模型

    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 的调试模式下,我收到以下信息,其中包含用户对象。

我正在尝试将 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(闭包,对象,对象,ResolutionContext) 在 AutoMapper.Mapper.Map[TDestination](Object source) 在 C:\projects\automapper\src\AutoMapper\Mapper.cs:line 35

【问题讨论】:

标签: c# entity-framework .net-core automapper dto


【解决方案1】:

似乎您正在映射 List&lt;Post&gt; 而不是 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 过滤器。它现在占用所有帖子,如果帖子很多,可能会导致生产中的性能问题。

【讨论】:

  • 是的,我现在有一个单独的方法可以获取所有用户的所有帖子,但稍后我会添加一些过滤器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多