AutoMapper 映射嵌套 属性 使用 linq
AutoMapper mapping nested property using linq
我需要在父对象中映射一个 属性 嵌套对象。
假设我有 users
有 roles
但角色有一个名为 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 一起使用,请小心。
我需要在父对象中映射一个 属性 嵌套对象。
假设我有 users
有 roles
但角色有一个名为 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 一起使用,请小心。