C# 从联接自动映射多对多映射字段
我正在使用Asp.net核心、EF核心和Automapper。我有一个多对多(在EF Core中,这是使用联接表所必需的),并且很难将联接表中的附加字段映射到我返回的DTO中的相关集合 这些是我的实体(缩写): 事件实体:C# 从联接自动映射多对多映射字段,c#,asp.net-core,entity-framework-core,automapper,C#,Asp.net Core,Entity Framework Core,Automapper,我正在使用Asp.net核心、EF核心和Automapper。我有一个多对多(在EF Core中,这是使用联接表所必需的),并且很难将联接表中的附加字段映射到我返回的DTO中的相关集合 这些是我的实体(缩写): 事件实体: public class Event { public int Id { get; set; } public string Title { get; set; } public ICollection<EventAttendee> Attend
public class Event
{
public int Id { get; set; }
public string Title { get; set; }
public ICollection<EventAttendee> Attendees { get; set; }
}
事件转发至:
public class EventToReturnDto
{
public int Id { get; set; }
public string Title { get; set; }
public ICollection<AttendeeDto> Attendees { get; set; }
}
自动映射配置文件:
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<AppUser, AttendeeDto>();
CreateMap<EventAttendee, AttendeeDto>();
CreateMap<Event, EventToReturnDto>()
.ForMember(dest => dest.Attendees,
opt => opt.MapFrom(x => x.Attendees.Select(y => y.AppUser).ToList()));
}
}
如何创建映射以输出DateJoined属性
谢谢,
James首先,您不需要这两行:
CreateMap<AppUser, AttendeeDto>();
CreateMap<EventAttendee, AttendeeDto>();
现在,在事件映射中,您正在将
EventAttendee
集合映射到AttendedTo
集合,因此您只需为此设置映射。在其中,您可以简单地使用导航属性访问相关实体。首先,您不需要这两行:
CreateMap<AppUser, AttendeeDto>();
CreateMap<EventAttendee, AttendeeDto>();
现在,在事件映射中,您正在将EventAttendee
集合映射到AttendedTo
集合,因此您只需为此设置映射。在其中,您可以简单地使用导航属性访问相关实体
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<AppUser, AttendeeDto>();
CreateMap<EventAttendee, AttendeeDto>();
CreateMap<Event, EventToReturnDto>()
.ForMember(dest => dest.Attendees,
opt => opt.MapFrom(x => x.Attendees.Select(y => y.AppUser).ToList()));
}
}
var events = await _context.Events
.Include(a => a.Attendees).ThenInclude(x => x.AppUser)
.OrderBy(e => e.Date)
.AsNoTracking()
.ToListAsync(cancellationToken);
var eventsToReturn = _mapper.Map<List<EventToReturnDto>>(events);
{
"id": 2,
"title": "Event 2",
"attendees": [
{
"id": 4,
"userName": "Dave",
"dateJoined": "0001-01-01T00:00:00"
},
{
"id": 3,
"userName": "Jane",
"dateJoined": "0001-01-01T00:00:00"
}
]
},
CreateMap<AppUser, AttendeeDto>();
CreateMap<EventAttendee, AttendeeDto>();
CreateMap<EventAttendee, AttendeeDto>()
.ForMember(d => d.Id, o => o.MapFrom(s => s.AppUserId))
.ForMember(d => d.UserName, o => o.MapFrom(s => s.AppUser.UserName))
.ForMember(d => d.DateJoined, o => o.MapFrom(s => s.DateJoined));
CreateMap<Event, EventToReturnDto>();