AutoMapper-映射枚举的类型时出错



我正在使用ASP.NET Core 6开发web API。我正在使用库自动映射程序。当我试图将我的类DTO转换为实体类时,我收到一个错误,因为Automapper无法识别和转换枚举。

错误:

AutoMapper.AutoMapperMappingException:映射类型错误。

映射类型:CreateRequestUserDto->使用者api。DTOs.CreateRequestUserDto->api。型号实体用户

类型映射配置:CreateRequestUserDto->使用者api。DTOs.CreateRequestUserDto->api。型号实体用户

目标成员:角色

--->AutoMapper.AutoMapperMappingException:缺少类型映射配置或不支持的映射。

映射类型:EnumRoles->角色api。Utilitis.Enum.EnumRoles->api。型号实体实体实体

实体类User.cs:

namespace api.Model.Entity;
public class User
{
public int Id { get; set; }
//other attributes
public virtual Role Role { get; set; }
}

实体类Role.cs:

using api.Utilitis.Enum;
public class Role
{
public int Id { get; set; }
[Column("Name", TypeName = "nvarchar(50)")]
public EnumRoles Name { get; set; }
public ICollection<User> Users{ get; set; }
}

DTO类CreateRequestUserDto.cs:

using api.Utilitis.Enum;
namespace api.DTOs;
public class CreateRequestUserDto
{
//other attributes
public EnumRoles Role { get; set; }
}

AutoMapperProfile.cs:

public AutoMapperProfile()
{
CreateMap<User, CreateRequestUserDto>()
.ForMember(cr => cr.Role, opt => opt.MapFrom(usr => usr.Role.Name)).ReverseMap();
//other codes
}

枚举.cs:

namespace api.Utilitis.Enum;
public enum EnumRoles { 
Administrator = 1, 
Operator = 2 
}

用户控制器.cs:

public async Task<ActionResult> Create([FromForm] CreateRequestUserDto request)
{  
var user = _mapper.Map<User>(request);
var result = await _userService.CreateUser(user);
return Ok(new { message = result.Message });
}

ServiceUser.cs:

public async Task<(bool Success, string Message)> CreateUser(User user)
{
try
{
_context.Users.Add(user);
await _context.SaveChangesAsync();               
return (true, "User added");
} catch(Exception ex)
{
return (false, ex.Message);
}
}

我错了什么?

您错过了从EnumRolesRoles的映射。

添加从EnumRolesRoles的映射,如下所示:

CreateMap<EnumRoles, Role>()
.ConstructUsing((src, dest) => new Role { Id = (int)src });

.NET Fiddle 示例


要插入Role问题的重复条目,请考虑您需要通过Id查询Role,然后将其附加到user

ServiceUser.cs

public async Task<(bool Success, string Message)> CreateUser(User user)
{
try
{   
var role = _context.Roles.Single(x => x.Id == user.Role.Id);
user.Role = role;

_context.Users.Add(user);
await _context.SaveChangesAsync();               
return (true, "User added");
} 
catch(Exception ex)
{
return (false, ex.Message);
}
}

相关内容

最新更新