Я пытаюсь сопоставить объекты в коллекцию через таблицу «многие ко многим», используя AutoMapper.
Моя модель предметной области (Entity Framework )выглядит так:
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, и я могу быстро посмотреть и увидеть, что он возвращается.