首页 > 解决方案 > 如何使用自动映射器映射多对多属性?

问题描述

我想用 AutoMapper 将我的许多对象映射到对象,但无法创建。

我正在使用 Entity Framework Core 3.0 版本。

我的实体:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<UserRole> UserRoles { get; set; }
}

public class UserRole
{
    public int UserId { get; set; }
    public int RoleId { get; set; }
    public DateTime DateAttached { get; set; }      
}

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<UserRole> UserRoles { get; set; }
}

我的 dto:

public class RolesOfUserViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime DateAttached { get; set; }
    public ICollection<UserRole> UserRoles { get; set; }
}

所以我有一个休息端点来获取具有DateAttached多对多表属性的用户角色。

var x = await _context.Users
    .Include(role => role.UserRoles)
    .Where(user => user.userRoles.Any(s => s.RoleId == id))
    .ToListAsync();

我为这些类创建了一个地图:

CreateMap<Role, RolesOfUserViewModel>()
    .AfterMap((source, destination) =>
    {
        foreach (var userRole in source.UserRoles)
            destination.DateAttached = userRole.DateAttached;
    });

但这设置了错误的值,因为一个用户可能有多个角色。我怎样才能做到这一点?

标签: c#entity-framework-coremany-to-manyautomapper

解决方案


推荐阅读