AutoMapper 映射嵌套 属性 使用 linq

AutoMapper mapping nested property using linq

我需要在父对象中映射一个 属性 嵌套对象。 假设我有 usersroles 但角色有一个名为 TransRoles 的翻译对象,最后一个有 属性 Description 这是我想要。

DTO 类

UsersDTO 标记:

public partial class UserDTO
{
    public short Id { get; set; }
    /* ... */

    public virtual RolesDTO RolesDTO { get; set; }
}

RolesDTO 标记:

public class RolesDTO
{
    public int Id { get; set; }
    public string Description { get; set; } // Mapping destination

    /* ... */
}

数据访问类

Users 标记:

public partial class User
{
    public short Id { get; set; }
    /* ... */

    public virtual Roles Roles { get; set; }
}

Roles 标记:

public class Roles
{
    public int Id { get; set; }
    public virtual ICollection<TransRoles> TransRoles { get; set; }

    // this class doesn't have the description    
    /* ... */
}

TransRoles 标记:

public class TransRoles
{
    public int Id { get; set; }
    public string Description { get; set; } // Mapping source

    /* ... */
}

我有以下代码,但是我想要的 Users.Roles.TransRoles.Description 的描述没有加载到 UsersDTO.RolesDTO.Description 中:

Mapper.CreateMap<User, UserDTO>();

// Dependencies
Mapper.CreateMap<Roles, RolesDTO>()
    .ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.TransRoles.FirstOrDefault().Description));

如果我手动映射它可以工作的属性,但我认为如果我使用的是库映射器则不是这样:

Mapper.CreateMap<User, UserDTO>();
Mapper.CreateMap<Roles, RolesDTO>();

// Manually mapping
UserDTO UserDTO = Mapper.Map<UserDTO>(User);
UserDTO.RolesDTO.Descripcion = User.Roles.TransRoles.FirstOrDefault().Description;

我必须找到主要 object 的所有内部引用,在我的示例中,RolesDTO 比 child 多了一个。此外,我目前正在使用 Oracle 11 和 EF 6.0,此版本不支持 APPLY 查询,因此包括不按预期方式工作的地方。

TLDR

在映射 object 时始终使用 Mapper.AssertConfigurationIsValid();,这样您就不会错过任何东西,如果您将 Oracle 11 与 EF 6.0 一起使用,请小心。