我正在尝试学习asp。网芯 2.2.我正在尝试设置一个简单的单页网站。我在使用自动映射器时遇到了一个问题,其中使用 forMember() 的手动 Mappinng 在顶级工作CreateMap<Listing, ListingSearchResultsDto>().ForMember(ListingPhotosUrl)
但不在较低级别工作。我还有另一个映射CreateMap<User, UserDetailsDto>()
其中user
包含一个对象Mylistings
类型为Listing
.Mylistings
正确自动映射到ListingSearchResultsDto
但不应用手动配置CreateMap<Listing, ListingSearchResultsDto>().ForMember(ListingPhotosUrl)
。
我已经尝试过CreateMap<User, UserDetailsDto>().Formember(dest.Mylistings.ListingPhotosUrl,src.Mylistings.Photos.Url)
但似乎是不可能的。
我也试过这个->但没有运气
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, UserDetailsDto>();
cfg.CreateMap<Listing, ListingSearchResultsDto>()
.ForMember(dest => dest.ListingPhotosUrl, opt =>
{
opt.MapFrom(src => src.Photos.FirstOrDefault(p => p.IsMain).Url);
});
});
var mapper = config.CreateMapper();
守则:
AutoMappperProfiles
public AutoMapperProfiles()
{
CreateMap<Listing, ListingSearchResultsDto>()
.ForMember(dest => dest.ListingPhotosUrl, opt =>
{
opt.MapFrom(src => src.Photos.FirstOrDefault(p => p.IsMain).Url);
});
CreateMap<User, UserDetailsDto>();
CreateMap<ListingPhoto, ListingPhotosDetailedDto>();
}
用户
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public ICollection<Listing> MyListings { get; set; }
}
用户详细信息Dto
public class UserDetailsDto
{
public int Id { get; set; }
public string Username { get; set; }
public ICollection<ListingSearchResultsDto> MyListings { get; set;}
}
清单
public int id { get; set; }
public string Category { get; set; }
public string Title { get; set; }
public ICollection<ListingPhoto> Photos { get; set; }
列表搜索结果Dto
public class ListingSearchResultsDto
{
public int id { get; set; }
public string Title { get; set; }
public string ListingPhotosUrl { get; set; }
}
我正在使用CreateMap<Listing, ListingSearchResultsDto>().Formember(des,src)
手动将目标属性映射到ListingPhotosUrl
。我还有另一个映射CreateMap<User, UserDetailsDto>()
.在User
和UsedetailsDto
类中,我有一个名为MyListings
的对象,分别是ICollection<Listing>
和ICollection<ListingSearchResultsDto>
。MyListings
对象已正确自动映射ListingPhotosUrl
但未应用手动映射。CreateMap<Listing,ListingSearchResultsDto>.Formember(des,src))
手动映射在顶层工作,但在CreateMap<User, UserDetailsDto>()
内部更深层次上不起作用,有没有办法解决这个问题?谢谢
已修复 - 自动映射器工作正常。实体框架数据库上下文中的问题。我没有在EF Core方法中将照片作为相关数据包含在用于加载用户数据GETUSER()
。它使用 EF Core 方法加载列表GetListing()
因为我有一个包含照片Include(p => p.Photos)
。
在GetUser()
中添加.ThenInclude(p => p.Photos)
后,照片返回了用户数据,自动映射器成功映射了用户数据ListingPhotosUrl
并成功应用了手动映射。
实体框架核心数据库上下文:
public async Task<User> GetUser(int id)
{
var user = await _context.Users
.Include(a => a.Avatar)
.Include(l => l.MyListings)
.ThenInclude(p => p.Photos)
.FirstOrDefaultAsync(u => u.Id == id);
return user;
}
public async Task<Listing> GetListing(int id)
{
var listing = await _context.Listings
.Include(p => p.Photos)
.FirstOrDefaultAsync(l => l.id == id);
return listing;
}