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

How to map property of entity using EF

提问人:Sachihiro 提问时间:10/25/2023 更新时间:10/26/2023 访问量:24

问:

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

我有一个用户,并且该用户属于一个类别,但是我想在返回所有用户 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 实体框架 net-7.0

评论


答:

0赞 YL2120 10/26/2023 #1

您应该配置 Automapper 以检索类别名称CreateMap<User, UserDto>() .ForMember(dest => dest.CategoryName, opt => opt.MapFrom(src => src.Category.CategoryName));

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