自动映射器 - 如何在深层应用 ForMember 配置



我正在尝试学习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>().在UserUsedetailsDto类中,我有一个名为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;
}

相关内容

  • 没有找到相关文章