Ben*_*Ben 5 automapper entity-framework-core
我们可以查看支持票证列表。
如果当前登录的用户已回复支持票证,我们现在需要显示附加图标。这意味着我们必须向投影添加额外的属性,我们不能只过滤当前用户的列表。
现在我们的想法是将这个附加属性与配置文件映射。但我们不知道如何将当前用户 ID 传递到配置文件。
在它可能看起来像这样
public class SupportTicketProjectionProfile : AutoMapper.Profile
{
public SupportTicketProjectionProfile()
{
CreateMap<SupportTicketEntity, SupportTicketProjection>()
.ForMember(p => p.CurrentUserHasReplied,
opt => opt.MapFrom(e=>e.Editors.Any(editor=> editor.Id == **passedIdValue**))
Run Code Online (Sandbox Code Playgroud)
但是如何传递userId呢?
我们发现我们可以将 Dictionary<string, object> 传递给 ProjectTo 方法。机器人我们找不到任何文档如何在 AutoMapper 配置文件中访问此字典。
感谢您的任何提示。
我终于找到了窍门:创建一个临时映射模型。
public class SupportTicketUserContextExpressionModel
{
public SupportTicketEntity SupportTicket { get; set; }
public bool UserHasReplied { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
借助(让我们命名为)表达式模型,您可以注入其他子查询结果:
var query = _dbContext.SupportTickets
.Select(ticket => new
{
ticket,
hasReplied = ticket.Editors.Any(e => e.UserId == userId)
})
.Select(temp => new SupportTicketUserContextExpressionModel
{
SupportTicket = temp.ticket,
HasReplied = temp.hasReplied
}));
Run Code Online (Sandbox Code Playgroud)
现在您需要一个新的附加配置文件:
CreateMap<SupportTicketUserContextExpressionModel, SupportTicketUserView>()
.ForMember(p => p.TicketId,
opt => opt.MapFrom(e => e.SupportTicket.Id))
// more here
.ForMember(p => p.UserHasReplied,
opt => opt.MapFrom(e => e.HasReplied));
Run Code Online (Sandbox Code Playgroud)
您可以使用您的 ProjectTo 的配置文件:
.ProjectTo<SupportTicketUserView>(_mapper.ConfigurationProvider);
Run Code Online (Sandbox Code Playgroud)
谢谢,本!
| 归档时间: |
|
| 查看次数: |
5537 次 |
| 最近记录: |