这是我的类,其中包含数据库数据:
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>();
});
答案 0 :(得分:0)
我相信这里是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无法自动映射它的原因,然后您应该使用我编写的手动配置。