Entity Framework Core Automapper为特定用户最新查看的项目



使用Entity Framework Core,我想获得用户最近查看的10个作业的列表。

我正在研究一个包含User,JobUserJobView类的CRM。

public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class Job
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
}
public class UserJobView
{
public Guid Id { get; set; }
public Guid JobId { get; set; }
public Guid UserId { get; set; }
public DateTime LastViewedAt { get; set; }
public Job Job { get; set; }
}

我也有一个JobDto,我计划使用AutoMapper

public class JobDto : IMapFrom<Job>
{
public Guid Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime? LastViewedAt { get; set; }
}

每次User查看Job时,我要么更新或创建一个UserJobView对象,将LastViewedAt属性设置为DateTime.Now

我可以使用以下流畅的查询获得最近查看的项目

return await _context.UserJobViews 
.Where(x => x.UserId == thisUserId)
.OrderByDescending(x => x.LastViewed)
.Take(10)
.Select(x => x.Job)
.ProjectTo<JobDto>(_mapper.ConfigurationProvider)
.ToListAsync();

然而,这显然没有为JobDto填充LastViewedAt属性。我该怎么做呢?

只需在配置中添加一点内容,就可以实现:

CreateMap<UserJobView, JobDto>().IncludeMembers(s => s.Job);

最新更新