我正在尝试使用 AutoMapper 通过多对多表将实体映射到集合中。
我的域模型(实体框架)如下所示:
public class User
{
public int UserID { get; set; }
public string Name { get; set; }
public IList<UserCompany> UserCompanies { get; set; }
}
public class Company
{
public int CompanyID { get; set; }
public string Name { get; set; }
}
public class UserCompany
{
public int UserCompanyID { get; set; }
public int UserID { get; set; }
public int CompanyID { get; set; }
}
我正在尝试映射到一个看起来像这样的类:
public class CompanyDTO
{
public int CompanyID { get; set; }
public string Name { get; set; }
}
public class UserDTO
{
public int UserID { get; set; }
public string Name { get; set; }
public IList<CompanyDTO> Companies { get; set; }
}
我当前的映射配置如下所示:
Mapper.CreateMap<Company, CompanyDTO>(); //works no problem
Mapper.CreateMap<User, UserDTO>()
.ForMember( dto => dto.Companies,
opt => opt.MapFrom(x => Mapper.Map<IList<Company>, IList<CompanyDTO>>(x.UserCompanies.Select( y => y.Company ).ToList())));
断言配置有效返回 true,但是当我尝试将用户实际映射到 UserDTO 时,我得到:主体的签名和方法实现中的声明不匹配。
如果我使用 AfterMap 并手动将每个公司移动到公司列表中,它将起作用,但似乎我应该能够在创建地图中处理这个问题。
在我从数据库中获取单个用户的查询中,我包含了 UserCompany.Company 导航属性,我可以快速查看并查看是否有返回。