如何使用Automapper从DTO创建连接实体的映射

时间:2017-06-13 07:01:11

标签: automapper

我有以下代码段。 我希望在将相关实体作为单个事务映射后保存我的用户实体。即实体框架将使用生成的UserId按预期更新UserBranchSpecialism表。 我找不到一种方法来指定UserBranchSpecialism的User属性作为我的映射配置的一部分。

// ENTITIES
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public BranchProfile BranchProfile { get;set; }
}

public class BranchProfile
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<UserBranchSpecialism> Specialisms { get; set; }
}

public class BranchSpecialism
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class UserBranchSpecialism
{
    public User User { get; set; }
    public BranchSpecialism BranchSpecialism { get;set; }
    public int BranchSpecialismId { get;set; }
    public int UserId { get; set; }
}

// DTOS
public class UserCreateDto 
{
    public string Name { get;set; }
}
public class BranchProfileDto
{
    public string Name { get;set; }
    public List<int> BranchSpecialismIds { get;set; }
}

// MAPPING CONFIG
CreateMap<UserCreateDto, User>();
CreateMap<BranchProfileDto, BranchProfile>()
    .ForMember(dest => dest.Specialisms, 
                opt => opt.MapFrom(src => src.BranchSpecialismIds
                    .Select(id => new UserBranchSpecialism() { BranchSpecialismId = id }).ToList()));

理想情况下, 我想做这样的事情:

// MAPPING CONFIG
CreateMap<UserCreateDto, User>();
CreateMap<BranchProfileDto, BranchProfile>()
    .ForMember(dest => dest.Specialisms, 
                opt => opt.MapFrom(src => src.BranchSpecialismIds
                    .Select(id => new UserBranchSpecialism() { BranchSpecialismId = id, User = ????  }).ToList()));

如何使用上面拆分的映射或使用任何其他替代方法实现此目的? 提前谢谢。

0 个答案:

没有答案