这是我的类,它保存数据库数据:
public partial class PermissionGroup
{
public int Id { get; set; }
public string Name { get; set; }
// other database properties
public virtual ICollection<GroupActionPermission> GroupActionPermissions { get; set; }
}那是我的dto:
public class PermissionGroupDTO
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<GroupActionPermissionDTO> ActionPermissions { get; set; }
}
public class GroupActionPermissionDTO
{
public int Id { get; set; }
public int GroupId { get; set; }
public int PermissionActionId { get; set; }
public PermissionGroupDTO Group { get; set; }
}现在,我正在绘制地图:
public IEnumerable<PermissionGroupDTO> GetGroups()
{
return OnConnect<IEnumerable<PermissionGroupDTO>>(db =>
{
return db.PermissionGroups
.Include(i => i.GroupActionPermissions)
.ProjectTo<PermissionGroupDTO>()
.ToList();
});
}我得到了PermissionGroupDTO的集合,它应该包含GroupActionPermissionDTO的集合,但是该集合保持为null。我的密码有什么问题吗?恐怕automapper可以从外键映射集合。
另外,这也是我的自动初始化器:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<PermissionGroup, PermissionGroupDTO>();
cfg.CreateMap<GroupActionPermission, GroupActionPermissionDTO>();
});发布于 2018-07-09 09:09:33
我相信原因在这里,http://docs.automapper.org/en/stable/Queryable-Extensions.html
请注意,要使此特性工作,必须在映射中显式处理所有类型转换。
因此,这意味着您应该手动配置映射:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<PermissionGroup, PermissionGroupDTO>()
.ForMember(dto => dto.ActionPermissions , conf => conf.MapFrom(ol => ol.GroupActionPermissions )));;
cfg.CreateMap<GroupActionPermission, GroupActionPermissionDTO>();
});顺便说一句,请注意字段的名称是不同的: GroupActionPermissions和ActionPermissions。这也是为什么automapper不自动映射它的原因,然后您应该使用我编写的手动配置。
https://stackoverflow.com/questions/51241492
复制相似问题