Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# 自动映射:如何将一个源映射到多个目标_C#_Asp.net Core_Automapper - Fatal编程技术网

C# 自动映射:如何将一个源映射到多个目标

C# 自动映射:如何将一个源映射到多个目标,c#,asp.net-core,automapper,C#,Asp.net Core,Automapper,我有以下示例实体: public class User { public string Username { get; set; } public string Password { get; set; } pubilc HashSet<UserRole> Roles { get; set; } } public class Role { public string RoleName { get; set; } public HashSet&

我有以下示例实体:

public class User
{
    public string Username { get; set; }
    public string Password { get; set; }
    pubilc HashSet<UserRole> Roles { get; set; }
}

public class Role
{
    public string RoleName { get; set; }
    public HashSet<UserRole> Users { get; set; }
}

public class UserRole
{
    public int UserId { get; set; }
    public virtual User User { get; set; }
    public int RoleId { get; set; }
    public virtual Role Role { get; set; }
}
公共类用户
{
公共字符串用户名{get;set;}
公共字符串密码{get;set;}
publilchashset角色{get;set;}
}
公共阶级角色
{
公共字符串RoleName{get;set;}
公共HashSet用户{get;set;}
}
公共类用户角色
{
public int UserId{get;set;}
公共虚拟用户用户{get;set;}
public int RoleId{get;set;}
公共虚拟角色{get;set;}
}
以及下列数码地面操作系统:

public class UserModel
{
    public string Username { get; set; }
    public string Password { get; set; }
    pubilc HashSet<RoleModel> Roles { get; set; }
}

public class RoleModel
{
    public string RoleName { get; set; }
    public HashSet<UserModel> Users { get; set; }
}
公共类用户模型
{
公共字符串用户名{get;set;}
公共字符串密码{get;set;}
publilchashset角色{get;set;}
}
公共类角色模型
{
公共字符串RoleName{get;set;}
公共HashSet用户{get;set;}
}
使用以下AutoMapper配置:

CreateMap<User, UserModel>();

CreateMap<Role, RoleModel>();

CreateMap<UserRole, UserModel>()
    .ConstructUsing((src, ctx) => ctx.Mapper.Map<UserModel>(src.User));

CreateMap<UserRole, RoleModel>()
    .ConstructUsing((src, ctx) => ctx.Mapper.Map<RoleModel>(src.Role));
CreateMap();
CreateMap();
CreateMap()
.ConstructUsing((src,ctx)=>ctx.Mapper.Map(src.User));
CreateMap()
.ConstructUsing((src,ctx)=>ctx.Mapper.Map(src.Role));
但此配置会导致iis停止,且不会出现任何错误

此配置是否适合将一个源映射到多个目标


我不确定这是否是使用这种映射的好方法。但问题在于映射中出现的无限循环(可能是嵌套映射)

以下注释的代码是循环的来源:


我不确定这是否是使用这种映射的好方法。但问题在于映射中出现的无限循环(可能是嵌套映射)

以下注释的代码是循环的来源:


您可以尝试以下映射:

public MapperConfig()
    {
        CreateMap<User, UserModel>();

        CreateMap<UserRole, RoleModel>()
            .ForMember(des=>des.RoleName,opt=>opt.MapFrom(src=>src.Role.RoleName));

        CreateMap<Role, RoleModel>();
        CreateMap<UserRole, UserModel>()
            .ForMember(des => des.Username, opt => opt.MapFrom(src => src.User.Username))
            .ForMember(des => des.Password, opt => opt.MapFrom(src => src.User.Password));

    }
publicMapPerConfig()
{
CreateMap();
CreateMap()
.ForMember(des=>des.RoleName,opt=>opt.MapFrom(src=>src.Role.RoleName));
CreateMap();
CreateMap()
.ForMember(des=>des.Username,opt=>opt.MapFrom(src=>src.User.Username))
.ForMember(des=>des.Password,opt=>opt.MapFrom(src=>src.User.Password));
}

您可以尝试以下映射:

public MapperConfig()
    {
        CreateMap<User, UserModel>();

        CreateMap<UserRole, RoleModel>()
            .ForMember(des=>des.RoleName,opt=>opt.MapFrom(src=>src.Role.RoleName));

        CreateMap<Role, RoleModel>();
        CreateMap<UserRole, UserModel>()
            .ForMember(des => des.Username, opt => opt.MapFrom(src => src.User.Username))
            .ForMember(des => des.Password, opt => opt.MapFrom(src => src.User.Password));

    }
publicMapPerConfig()
{
CreateMap();
CreateMap()
.ForMember(des=>des.RoleName,opt=>opt.MapFrom(src=>src.Role.RoleName));
CreateMap();
CreateMap()
.ForMember(des=>des.Username,opt=>opt.MapFrom(src=>src.User.Username))
.ForMember(des=>des.Password,opt=>opt.MapFrom(src=>src.User.Password));
}

我刚刚将Automapper 9.0.0安装到.NET Framework WinForms项目中,复制了您的代码,将配置代码更改为使用
MapperConfiguration
,然后运行它,创建的配置没有错误。请制作一个小的测试项目,只复制您认为相关的代码,然后从那里进行调查。@您可以使用这个github项目来了解我所说的,我刚刚将Automapper 9.0.0安装到.NET Framework WinForms项目,复制了您的代码,将配置代码更改为使用
MapperConfiguration
,运行了它,并且创建的配置没有错误。请做一个小的测试项目,只复制你认为相关的代码,然后从那里进行调查。你可以使用这个github项目来看看我说的话,