C# 如何使用AutoMapper访问UserViewModel中的角色名称
如何使用AutoMapper访问UserViewModel中的角色名称 我的用户模型:C# 如何使用AutoMapper访问UserViewModel中的角色名称,c#,asp.net-identity,automapper,C#,Asp.net Identity,Automapper,如何使用AutoMapper访问UserViewModel中的角色名称 我的用户模型: public class User : IdentityUser<long, UserLogin, UserRole, UserClaim> { } 公共类用户:IdentityUser { } 我的榜样: public class Role : IdentityRole<long, UserRole> { } public class
public class User : IdentityUser<long, UserLogin, UserRole, UserClaim>
{
}
公共类用户:IdentityUser
{
}
我的榜样:
public class Role : IdentityRole<long, UserRole>
{
}
public class UserRole : IdentityUserRole<long>
{
}
公共类角色:IdentityRole
{
}
我的用户角色模型:
public class Role : IdentityRole<long, UserRole>
{
}
public class UserRole : IdentityUserRole<long>
{
}
public类用户角色:IdentityUserRole
{
}
我的userViewModel:
public class UserViewModel
{
public List<string> RoleNames { get; set; }
}
public类UserViewModel
{
公共列表角色名称{get;set;}
}
我的映射:
CreateMap<List<UserRole>, List<string>>().ConvertUsing(new UserRoleConverter());
CreateMap<User, >()
.ForMember(d => d.RoleNames, m => m.MapFrom(s => s.Roles));
CreateMap().ConvertUsing(新的UserRoleConverter());
CreateMap()
.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;
}
}
公共类UserRoleConverter:ITypeConverter
{
公共列表转换(ResolutionContext上下文)
{
var userRole=context.SourceValue;
}
}
您的示例不完整-您的用户映射引用了示例中不存在的角色
属性。因此不清楚这是Role
还是UserRole
对象的列表
然而,做一些假设,这是可行的
首先,您的类型转换器应该在UserRole
和string
之间转换,而不是在列表之间转换:
public class UserRoleConverter : ITypeConverter<UserRole, string>
{
public string Convert(ResolutionContext context)
{
// Assuming a "Name" property on UserRole
return ((UserRole)context.SourceValue).Name;
}
}
公共类UserRoleConverter:ITypeConverter
{
公共字符串转换(ResolutionContext上下文)
{
//假定UserRole上有“Name”属性
返回((UserRole)context.SourceValue).Name;
}
}
因此,映射应如下所示:
Mapper.CreateMap<UserRole, string>().ConvertUsing(new UserRoleConverter());
Mapper.CreateMap().ConvertUsing(新的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());
User=新用户
{
角色=新列表
{
//假设使用构造函数来设置名称
新用户角色(“角色1”),
新用户角色(“角色2”)
}
};
UserViewModel uvm=Mapper.Map(用户);
aresequal(2,uvm.RoleNames.Count);
arest.AreEqual(“Role1”,uvm.RoleNames.First());
aresequal(“Role2”,uvm.RoleNames.Last());
CreateMap()中缺少的类是什么