"Error mapping types" ICollection 类型成员的自动映射器上的错误



尝试将DTO转换为模型时收到以下错误消息。

MEMBER_Model model = Mapper.Map<MEMBER_Model>(item);

错误映射类型。

映射类型:T_MEMBER -> MEMBER_Model TL。.CFM。数据。T_MEMBER ->TL..CFM。核心。MEMBER_Model

类型映射配置:T_MEMBER -> MEMBER_Model TL。.CFM。数据。T_MEMBER -> TL..CFM。核心。MEMBER_Model

目的地会员: MEMBER_GROUPs

DTO类:

public partial class T_MEMBER
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public T_MEMBER()
{
this.REL_MEMBER_GROUP = new HashSet<REL_MEMBER_GROUP>();
}
public decimal ID { get; set; }
public string USERNAME { get; set; }
public string PASSWORD { get; set; }
public decimal IS_ACTIVE { get; set; }
public decimal IS_DELETED { get; set; }
public Nullable<decimal> CRE_BY { get; set; }
public Nullable<System.DateTime> CRE_DATE { get; set; }
public Nullable<decimal> UPD_BY { get; set; }
public Nullable<System.DateTime> UPD_DATE { get; set; }
public decimal PERSON_ID { get; set; }
}

型号类别:

public class MEMBER_Model : _BaseModel
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public MEMBER_Model()
{
this.MEMBER_GROUPs = new HashSet<MEMBER_GROUP_Model>();
}
public override decimal ID { get; set; }
public string USERNAME { get; set; }
public string PASSWORD { get; set; }
public bool IS_ACTIVE { get; set; }
public bool IS_DELETED { get; set; }
public override Nullable<decimal> CRE_BY { get; set; }
public override Nullable<DateTime> CRE_DATE { get; set; }
public override Nullable<decimal> UPD_BY { get; set; }
public override Nullable<DateTime> UPD_DATE { get; set; }
public decimal PERSON_ID { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<MEMBER_GROUP_Model> MEMBER_GROUPs { get; set; }
public string Fullname
{
get
{
return string.Format("{0} {1}", FIRST_NAME, LAST_NAME);
}
}
}

自动映射器配置:

public static void SetAutoMapperConfs()
{
Mapper.Initialize(cfg =>
{
#region MEMBER_Model -1
cfg.CreateMap<T_MEMBER, MEMBER_Model>()
.ForMember(d => d.MEMBER_GROUPs, f => f.MapFrom(src => src.REL_MEMBER_GROUP))
.ReverseMap();
#endregion
#region MEMBER_GROUP_Model -2
cfg.CreateMap<REL_MEMBER_GROUP, MEMBER_GROUP_Model>()
.ForMember(d => d.AUTH_GROUP, f => f.MapFrom(src => src.LKP_AUTH_GROUP))
.ForMember(d => d.MEMBER, f => f.MapFrom(src => src.T_MEMBER))
.ReverseMap();
#endregion      
#region AUTH_GROUP_Model -3
cfg.CreateMap<LKP_AUTH_GROUP, AUTH_GROUP_Model>()
.ForMember(d => d.GROUP_ROLEs, f => f.MapFrom(src => src.REL_GROUP_ROLE))
.ForMember(d => d.MEMBER_GROUPs, f => f.MapFrom(src => src.REL_MEMBER_GROUP))
.ReverseMap();
#endregion
#region GROUP_ROLE_Model -4
cfg.CreateMap<REL_GROUP_ROLE, GROUP_ROLE_Model>()
.ForMember(d => d.AUTH_GROUP, f => f.MapFrom(src => src.LKP_AUTH_GROUP))
.ForMember(d => d.ROLE, f => f.MapFrom(src => src.LKP_ROLE))
.ReverseMap();
#endregion
#region ROLE_Model -5
cfg.CreateMap<LKP_ROLE, ROLE_Model>()
//.ForMember(d => d.GROUP_ROLEs, f => f.MapFrom(src => src.REL_GROUP_ROLE))
.ReverseMap();
#endregion
});
}

显示关系流的标签 #region 处的数字。

如您所见,#region ROLE_Model -5有一个注释行。此行会导致问题。(注意:我认为递归第一次从这里开始,它可能会引发问题)

=更新=

输出值:

引发的异常:"AutoMapper.AutoMapperConfigurationException" AutoMapper.dll frknc: AutoMapper.AutoMapperConfigurationException: 找到未映射的成员。查看下面的类型和成员。添加一个 自定义映射表达式、忽略、添加自定义解析程序或修改 源/目标类型 对于没有匹配的构造函数,请添加一个无参数 ctor,添加可选参数或映射所有构造函数参数

====

====================================================================自动映射器为您创建了此类型映射,但您的类型不能 使用当前配置映射。REL_GROUP_ROLE ->MEMBER_GROUP_Model(目标成员列表) TL..CFM。数据。REL_GROUP_ROLE -> TL。.CFM。核心。MEMBER_GROUP_Model (目标成员列表)

未映射的属性:ID MEMBER_ID AUTH_GROUP成员

在 AutoMapper.ConfigurationValidator.AssertConfigurationIsValid(IEnumerable'1 typeMaps) 抛出的异常:"AutoMapper.AutoMapperMappingException" AutoMapper.dll frknc: AutoMapper.AutoMapperMappingException: Error 映射类型。

映射类型:LKP_ROLE -> ROLE_Model TL。.CFM。数据。LKP_ROLE ->TL。.CFM。核心。ROLE_Model

类型映射配置:LKP_ROLE -> ROLE_Model TL。.CFM。数据。LKP_ROLE ->TL。.CFM。核心。ROLE_Model

目标成员:GROUP_ROLEs --->自动映射程序.自动映射程序配置异常:未映射的成员是 发现。查看下面的类型和成员。添加自定义映射 表达式、忽略、添加自定义解析程序或修改 源/目标类型 对于没有匹配的构造函数,请添加一个 no-arg ctor,添加可选参数或映射所有构造函数参数

====

====================================================================自动映射器为您创建了此类型映射,但您的类型不能 使用当前配置映射。REL_GROUP_ROLE ->MEMBER_GROUP_Model(目标成员列表) TL..CFM。数据。REL_GROUP_ROLE -> TL。.CFM。核心。MEMBER_GROUP_Model (目标成员列表)

未映射的属性:ID MEMBER_ID AUTH_GROUP成员

在 AutoMapper.ConfigurationValidator.AssertConfigurationIsValid(IEnumerable'1 typeMaps) 在 lambda_method(闭包 , LKP_ROLE , ROLE_Model , ResolutionContext ) --- 内部异常堆栈跟踪结束---
在 lambda_method 处(闭包、LKP_ROLE、ROLE_Model、ResolutionContext ) 引发的异常:"AutoMapper.AutoMapperMappingException" AutoMapper.dll frknc: AutoMapper.AutoMapperMappingException: Error 映射类型。

映射类型:REL_GROUP_ROLE -> GROUP_ROLE_Model TL..CFM。数据。REL_GROUP_ROLE -> TL。.CFM。核心。GROUP_ROLE_Model

类型映射配置:REL_GROUP_ROLE -> GROUP_ROLE_Model TL..CFM。数据。REL_GROUP_ROLE -> TL。.CFM。核心。GROUP_ROLE_Model

目标成员:角色--->自动映射程序。自动映射程序映射异常: 错误映射类型。

映射类型:LKP_ROLE -> ROLE_Model TL。.CFM。数据。LKP_ROLE ->TL。.CFM。核心。ROLE_Model

类型映射配置:LKP_ROLE -> ROLE_Model TL。.CFM。数据。LKP_ROLE ->TL。.CFM。核心。ROLE_Model

目标成员:GROUP_ROLEs --->自动映射程序.自动映射程序配置异常:未映射的成员是 发现。查看下面的类型和成员。添加自定义映射 表达式、忽略、添加自定义解析程序或修改 源/目标类型 对于没有匹配的构造函数,请添加一个 no-arg ctor,添加可选参数或映射所有构造函数参数

====

====================================================================自动映射器为您创建了此类型映射,但您的类型不能 使用当前配置映射。REL_GROUP_ROLE ->MEMBER_GROUP_Model(目标成员列表) TL..CFM。数据。REL_GROUP_ROLE -> TL。.CFM。核心。MEMBER_GROUP_Model (目标成员列表)

未映射的属性:ID MEMBER_ID AUTH_GROUP成员

在 AutoMapper.ConfigurationValidator.AssertConfigurationIsValid(IEnumerable'1 typeMaps) 在 lambda_method(闭包 , LKP_ROLE , ROLE_Model ,ResolutionContext ) --- 内部异常堆栈跟踪结束---
在 lambda_method 处(闭包、LKP_ROLE、ROLE_Model、ResolutionContext ) 在 AutoMapper.Mapper.AutoMapper.IRuntimeMapper.Map[TSource,TDestination](TSource 源, 目标, 解析上下文上下文, IMemberMap memberMap) 在 lambda_method(Closure , LKP_AUTH_GROUP , AUTH_GROUP_Model , ResolutionContext ) --- 内部异常结束 堆栈跟踪---在 lambda_method(闭包、LKP_AUTH_GROUP、 AUTH_GROUP_Model , ResolutionContext ) 抛出的异常: AutoMapper.AutoMapperMappingException' in AutoMapper.dll frknc: AutoMapper.AutoMapperMappingException:映射类型时出错。

映射类型:LKP_AUTH_GROUP -> AUTH_GROUP_Model TL..CFM。数据。LKP_AUTH_GROUP -> TL。.CFM。核心。AUTH_GROUP_Model

类型映射配置:LKP_AUTH_GROUP -> AUTH_GROUP_Model TL..CFM。数据。LKP_AUTH_GROUP -> TL。.CFM。核心。AUTH_GROUP_Model

目标成员:GROUP_ROLEs --->自动映射程序。自动映射程序映射异常:映射类型错误。

映射类型:REL_GROUP_ROLE -> GROUP_ROLE_Model TL..CFM。数据。REL_GROUP_ROLE -> TL。.CFM。核心。GROUP_ROLE_Model

类型映射配置:REL_GROUP_ROLE -> GROUP_ROLE_Model TL..CFM。数据。REL_GROUP_ROLE -> TL。.CFM。核心。GROUP_ROLE_Model

目标成员:角色--->自动映射程序。自动映射程序映射异常: 错误映射类型。

映射类型:LKP_ROLE -> ROLE_Model TL。.CFM。数据。LKP_ROLE ->TL。.CFM。核心。ROLE_Model

类型映射配置:LKP_ROLE -> ROLE_Model TL。.CFM。数据。LKP_ROLE ->TL。.CFM。核心。ROLE_Model

目标成员:GROUP_ROLEs --->自动映射程序.自动映射程序配置异常:未映射的成员是 发现。查看下面的类型和成员。添加自定义映射 表达式、忽略、添加自定义解析程序或修改 源/目标类型 对于没有匹配的构造函数,请添加一个 no-arg ctor,添加可选参数或映射所有构造函数参数

====

====================================================================自动映射器为您创建了此类型映射,但您的类型不能 使用当前配置映射。REL_GROUP_ROLE ->MEMBER_GROUP_Model(目标成员列表) TL..CFM。数据。REL_GROUP_ROLE -> TL。.CFM。核心。MEMBER_GROUP_Model (目标成员列表)

未映射的属性:ID MEMBER_ID AUTH_GROUP成员

在 AutoMapper.ConfigurationValidator.AssertConfigurationIsValid(IEnumerable'1 typeMaps) 在 lambda_method(闭包 , LKP_ROLE , ROLE_Model , ResolutionContext ) --- 内部异常堆栈跟踪结束---
在 lambda_method 处(闭包、LKP_ROLE、ROLE_Model、ResolutionContext ) 在 AutoMapper.Mapper.AutoMapper.IRuntimeMapper.Map[TSource,TDestination](TSource 源, 目标, 解析上下文上下文, IMemberMap memberMap) 在 lambda_method(Closure , LKP_AUTH_GROUP , AUTH_GROUP_Model , ResolutionContext ) --- 内部异常结束 堆栈跟踪---在 lambda_method(闭包、LKP_AUTH_GROUP、 AUTH_GROUP_Model , ResolutionContext ) --- 内部异常结束 堆栈跟踪---在 lambda_method(闭包、LKP_AUTH_GROUP、 AUTH_GROUP_Model , ResolutionContext ) 抛出的异常: AutoMapper.AutoMapperMappingException' in AutoMapper.dll

您是否尝试在配置文件中忽略它们并查看错误是否仍然存在?如果它仍然存在,您是否尝试查看异常详细信息?它应该说哪些成员没有被映射?ForAllOtherMemebers(x=>x.Ignore()).更多信息: dotnettutorials.net/lesson/ignore-using-automapper-in-csharp

最重要的是,您无法将ICollection映射到ICollection,因为它们不是具体类型。例如:

该 soure 可以是 IEnumerable,但输出只能是一个列表。

映射时,自动映射器将为未使用的 dto 对象键抛出错误。

以下修复了问题。将其添加到您的个人资料中。

.ForAllOtherMembers(x => x.Ignore())

最新更新