C# 使用automapper映射对象时出现问题
我对映射有问题。这是我的型号C# 使用automapper映射对象时出现问题,c#,entity-framework,.net-core,automapper,dto,C#,Entity Framework,.net Core,Automapper,Dto,我对映射有问题。这是我的型号 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;
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));
CreateMap()
.FormMember(p=>p.作者,
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;
}
public异步任务GetPosts(){
var posts=\u context.posts
.包括(u=>u.User)
.OrderByDescending(p=>p.Created)
.ToListAsync();
返回等待岗位;
}
在后控制器中处于调试模式时,我收到以下信息,其中包含用户对象
我试图将KnownAs属性从用户对象映射到我的DTO,但没有成功。
错误是:
AutoMapper.AutoMappingException:缺少类型映射配置或映射不受支持。
映射类型:
列表1->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
at lambda_方法(闭包,列表'1,PostForReturnDto,ResolutionContext)
at lambda_方法(闭包、对象、对象、ResolutionContext)
在C:\projects\AutoMapper\src\AutoMapper\Mapper.cs中的AutoMapper.Mapper.Map[tdestation](对象源):第35行似乎您正在映射
列表
而不是像它应该映射的Post
实例
试试下面这样
var posts=wait_repo.GetPosts();
var res=posts.Select(=>_mapper.Map());
返回Ok(res);
或者可以将具有泛型参数的集合映射为
IEnumerable postToReturn=mapper.Map(posts);
UPD似乎您的
GetPosts()
实现缺少一些Where
或Take
过滤器。它现在占用了所有的帖子,如果有很多帖子,可能会导致制作中的性能问题。这是否回答了您的问题?是的,我现在有一个单独的方法来处理所有用户的所有帖子,但稍后,我会添加一些过滤器。
IEnumerable<PostToReturn> postToReturn= mapper.Map<IEnumerable<Post>, IEnumerable<PostToReturn>>(posts);