[英]Automapper with many to many and IncludeMembers
Below is my Class下面是我的班级
public class Account
{
public int Id { get; set; }
public string AccountNumber { get; set; } = null!;
..other fields
public SubAccount1 SubAccount1 { get; set; } = null!;
public SubAccount2 SubAccount2 { get; set; } = null!;
public ICollection<AccountCustomer> AccountAndCustomers { get; set; } = new List<AccountCustomer>(); ///Many to many mapping
}
public class AccountCustomer
{
public int AccountId { get; set; }
public Account Account { get; set; } = null!;
public int CustomerId { get; set; }
public Customer Customer { get; set; } = null!;
...other fields
}
public class SubAccount1
{
public int AccountId { get; set; }
public Account Account { get; set; } = null!;
public string Subfield1 { get; set; } = null!;
..other fields
}
public class SubAccount2
{
public int AccountId { get; set; }
public Account Account { get; set; } = null!;
public string Subfield2 { get; set; } = null!;
..other fields
}
public class SubAccount1DTO
{
public int AccountId { get; set; }
public string AccountNumber { get; set; } = null!;
public string Subfield1 { get; set; } = null!;
public IReadOnlyList<CustomerDTO> Customers { get; set; } = new List<CustomerDTO>();
}
public class CustomerDTO
{
public int Id { get; set; }
public string CustomerNo { get; set; } = null!;
public string FirstName { get; set; } = null!;
..other fillds
}
public class Customer
{
public int Id { get; set; }
public string? CustomerNo { get; set; } = null!;
....other filds
public ICollection<AccountCustomer> AccountAndCustomers { get; set; } = new List<AccountCustomer>();
}
Auto mapper configuration based on this link Automapper many to many基于此链接的自动映射器配置Automapper many to many
CreateMap<Customer, CustomerDTO>().ReverseMap();
CreateMap<Account, SubAccount1DTO>()
.IncludeMembers(s => s.SubAccount1)
.ForMember(d => d.Customers, opt => opt.MapFrom(s => s.AccountAndCustomers)) ///After include Customers related am getting error
.ReverseMap()
.AfterMap((s, d) =>
{
foreach (var accountCustomer in d.AccountAndCustomers)
accountCustomer.AccountId = s.AccountId ;
});
CreateMap<SubAccount1, SubAccount1DTO>(MemberList.None)
.ForMember(dest => dest.Id, opt => opt.Ignore())
.ForMember(dest => dest.AccountNumber, opt => opt.Ignore())
.ReverseMap();
CreateMap<Customer, AccountCustomer>() ----i dnt no whether this to included
.ForMember(dest => dest.CustomerId, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.Customer, opt => opt.MapFrom(src => src))
.ForMember(dest => dest.AccountId, opt => opt.Ignore())
.ForMember(dest => dest.Account, opt => opt.Ignore())
;
I need to map Account to SubAccount1DTO and Reversemap.我需要将 Account 映射到 SubAccount1DTO 和 Reversemap。 Here SubAccount1DTO has list of customersdto But when i included below line这里 SubAccount1DTO 有 customerdto 列表但是当我包含在下面的行
.ForMember(d => d.Customers, opt => opt.MapFrom(s => s.AccountAndCustomers)) .ForMember(d => d.Customers, opt => opt.MapFrom(s => s.AccountAndCustomers))
i am getting below error .. Please suggest我收到以下错误..请提出建议
One or more errors occurred.发生了一个或多个错误。 (The following member on Application.DTOs.Accounts.SubAccount1DTO cannot be mapped: Customers Add a custom mapping expression, ignore, add a custom resolver, or modify the destination type Application.DTOs.Accounts.SubAccount1DTO. Context: Mapping to member Customers from Domain.Entities.Accounts.Account to Application.DTOs.Accounts.SubAccount1DTO (Application.DTOs.Accounts.SubAccount1DTO 上的以下成员无法映射:Customers 添加自定义映射表达式、忽略、添加自定义解析器或修改目标类型 Application.DTOs.Accounts.SubAccount1DTO。上下文:映射到成员客户来自Domain.Entities.Accounts.Account 到 Application.DTOs.Accounts.SubAccount1DTO
The following mapping下面的映射
.ForMember(d => d.Customers, opt => opt.MapFrom(s => s.AccountAndCustomers))
maps source property of type ICollection<AccountCustomer>
to destination property of type IReadOnlyList<CustomerDTO>
.将ICollection<AccountCustomer>
类型的源属性映射到IReadOnlyList<CustomerDTO>
类型的目标属性。
AutoMapper allows that, but requires you to create map for collection element types - in this specific case, AccountCustomer
to CustomerDTO
(in the linked post there is similar mapping from BookCategory
to CategoryDto
). AutoMapper 允许这样做,但要求您为集合元素类型创建映射 - 在这种特定情况下,是AccountCustomer
到CustomerDTO
(在链接的帖子中有类似的从BookCategory
到CategoryDto
映射)。
Hence the minimum you need here is adding something like this to the mapper configuration:因此,您至少需要在映射器配置中添加如下内容:
CreateMap<AccountCustomer, CustomerDTO>()
.IncludeMembers(s => s.Customer);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.