如何使用EF映射实体的属性

问题描述 投票:0回答:1

标题可能有点偏离,但我对如何提出我的问题没有更好的想法。

我有一个用户,该用户属于一个类别,但我想在返回所有用户 dto 时映射类别名称,而不是用于跟踪该用户所属类别的categoryId。

// Entities
public partial class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNr { get; set; }
  public int CategoryId { get; set; }
  // Navigation Properties
    public virtual Category Category { get; set; }
}

public partial class Category
{
    public int Id { get; set; }
    public string CategoryName { get; set; }
    // Navigation Properties
    public virtual ICollection<User> User { get; set; }
}

// DTOs
public class UserDto : IMapFrom<User>
{
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNr { get; set; }
    public int CategoryId { get; set; } // --> Want to map CategoryName instead
}

// Get all Users
    public async Task<IEnumerable<UserDto>> Handle(GetAllUsersQuery request, CancellationToken cancellationToken)
    {
        var data = await _context.Users
                 .ProjectTo<UserDto>(_mapper.ConfigurationProvider)
                 .ToListAsync(cancellationToken);
        return data;
    }
asp.net .net entity-framework .net-7.0
1个回答
0
投票

您应该配置 Automapper 来检索类别名称

CreateMap<User, UserDto>() .ForMember(dest => dest.CategoryName, opt => opt.MapFrom(src => src.Category.CategoryName));

因此,当完成从用户到用户 dto 的映射时,将检索类别名称而不是 id。

© www.soinside.com 2019 - 2024. All rights reserved.