使用自动映射器映射对象的问题
Problem with mapping objects with automapper
我有映射问题。这是我的 模型.
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 属性 从用户对象映射到我的 DTO,但没有成功。
错误是:
AutoMapper.AutoMapperMappingException:缺少类型映射配置或不支持的映射。
映射类型:
List1 -> PostForReturnDto
System.Collections.Generic.List
1[[DateApp.API.Models.Post, DateApp.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> DateApp.API.Dtos.PostForReturnDto
在 lambda_method(闭包,List`1,PostForReturnDto,ResolutionContext)
在 lambda_method(闭包,对象,对象,ResolutionContext)
在 AutoMapper.Mapper.Map[TDestination](对象源)在 C:\projects\automapper\src\AutoMapper\Mapper.cs:line 35
似乎您映射的是 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()
实施似乎缺少一些 Where
或 Take
过滤器。它现在占用所有帖子,如果有很多帖子,它可能会导致生产中的性能问题。
我有映射问题。这是我的 模型.
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 属性 从用户对象映射到我的 DTO,但没有成功。 错误是:
AutoMapper.AutoMapperMappingException:缺少类型映射配置或不支持的映射。
映射类型:
List1 -> PostForReturnDto
System.Collections.Generic.List
1[[DateApp.API.Models.Post, DateApp.API, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> DateApp.API.Dtos.PostForReturnDto
在 lambda_method(闭包,List`1,PostForReturnDto,ResolutionContext)
在 lambda_method(闭包,对象,对象,ResolutionContext)
在 AutoMapper.Mapper.Map[TDestination](对象源)在 C:\projects\automapper\src\AutoMapper\Mapper.cs:line 35
似乎您映射的是 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()
实施似乎缺少一些 Where
或 Take
过滤器。它现在占用所有帖子,如果有很多帖子,它可能会导致生产中的性能问题。