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を使用して、各会社を手動で会社リストに移動すると、機能しますが、マップの作成内でこれを処理できるはずです。
DBから単一のユーザーを取得するためのクエリに、UserCompany.Companyナビゲーションプロパティを含めています。クイックウォッチして、返されるものがあることを確認できます。