Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用AutoMapper访问UserViewModel中的角色名称_C#_Asp.net Identity_Automapper - Fatal编程技术网

C# 如何使用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

如何使用AutoMapper访问UserViewModel中的角色名称

我的用户模型:

 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()中缺少的类是什么