如何使用AutoMapper访问UserViewModel中的角色名称?
我的用户模型:
public class User : IdentityUser<long, UserLogin, UserRole, UserClaim>
{
}
我的榜样:
public class Role : IdentityRole<long, UserRole>
{
}
我的用户角色模型:
public class UserRole : IdentityUserRole<long>
{
}
我的userViewModel:
public class UserViewModel
{
public List<string> RoleNames { get; set; }
}
我的映射:
CreateMap<List<UserRole>, List<string>>().ConvertUsing(new UserRoleConverter());
CreateMap<User, >()
.ForMember(d => d.RoleNames, m => m.MapFrom(s => s.Roles));
我的用户角色转换器:
public class UserRoleConverter : ITypeConverter<List<UserRole>, List<string>>
{
public List<string> Convert(ResolutionContext context)
{
var userRole = context.SourceValue;
}
}
您的示例不完整-您的用户映射引用了示例中不存在的Roles
属性。因此,尚不清楚这是Role
还是UserRole
对象的列表。
然而,只要做一些假设,这是可行的。
首先,TypeConverter应该在UserRole
和string
之间转换,而不是在列表之间转换:
public class UserRoleConverter : ITypeConverter<UserRole, string>
{
public string Convert(ResolutionContext context)
{
// Assuming a "Name" property on UserRole
return ((UserRole)context.SourceValue).Name;
}
}
所以映射应该是这样的:
Mapper.CreateMap<UserRole, string>().ConvertUsing(new UserRoleConverter());
那么这个测试应该通过:
User user = new User
{
Roles = new List<UserRole>
{
// Assume a constructor to set the Name
new UserRole("Role1"),
new UserRole("Role2")
}
};
UserViewModel uvm = Mapper.Map<User, UserViewModel>(user);
Assert.AreEqual(2, uvm.RoleNames.Count);
Assert.AreEqual("Role1", uvm.RoleNames.First());
Assert.AreEqual("Role2", uvm.RoleNames.Last());