c# - Automapper - 如何在深层应用 ForMember 配置
问题描述
我正在尝试学习 asp.NetCore 2.2。我正在尝试设置一个简单的单页网站。我遇到了 Automapper 的问题,其中使用 forMember() 的手动映射在顶层工作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>()
,有没有办法解决这个问题?谢谢
解决方案
已修复 - Automapper 工作正常。实体框架 DbContext 中的问题。我没有将照片作为相关数据包含在 EF Core 加载 USER 数据的方法中GETUSER()
。它正在使用 EF Core 方法来加载 LISTING GetListing()
,因为我有一个包含照片Include(p => p.Photos)
。
添加.ThenInclude(p => p.Photos)
后GetUser()
,照片返回了用户数据,自动映射器成功映射了用户数据,ListingPhotosUrl
手动映射成功应用。
实体框架核心 DbContext:
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;
}
推荐阅读
- postman - 在 Postman 中保存示例
- visual-studio - .net core 3.1 odbc 驱动程序连接在调试模式下失败
- ubuntu - 如何解决ubuntu中Wien2k软件编译错误?
- java - 如何在 java 应用程序中使用 webRTC 特定模块
- python - python代码中的相对路径-最佳实践
- javascript - 从 Angular HttpClient POST 的响应中看不到 F12-Application-Cookies 中的 cookie
- magento - Magento 升级 2.4.3 抛出错误(无法实例化接口_
- angular - 使用引导带 css 将角度升级 5 到 7
- python-3.x - 将所有输入工作表中的单元格样式复制到输出文件
- python - 有没有办法从 python 运行 azure-devops 管道?