[英].NET Core 3 automapper not mapping different name variables? Worked in .NET framework
下面是自动映射配置文件。 输入格式错误的目标Id
会引发错误。
目标Id
属性甚至没有被映射到。
public class AspGetUserLoginReturnModelToSRSDLUserLoginModel : Profile
{
public AspGetUserLoginReturnModelToSRSDLUserLoginModel()
{
CreateMap<asp_GetUserLoginReturnModel, SRSDLUserLoginModel>()
.ForMember(dest => dest.UserPassword, opt => opt.MapFrom(src => src.PasswordHash))
.ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.Id)
;
}
}
现在,目标 class SRSDLUserLoginModel
派生自基础 class ,该基础具有名为Id
的公共访问器,其类型为可为空的long
。
上面使用的源Id
属性是string
类型。
如上面所示的代码,源Id
映射到目标UserId
属性。
但是 Automapper 将源Id
映射到目标的基于类Id
属性。
为什么会这样?
代码是直截了当的,没有什么新的尝试要完成。 它 Automapper 像我使用的大多数其他软件包一样吗?
在完整/经典的 .NET 框架中,这些包运行良好,但在 .NET Core 中,这些包很糟糕?
// source class
public partial class asp_GetUserLoginReturnModel
{
public string Id { get; set; }
}
// destination classes
public class SRSDLUserLoginModel: SRSDLModel, ISRSDLUserLoginModel
{
public string UserId { get; set; }
public string UserPassword { get; set; }
// [...]
}
public class SRSDLModel : ISRSDLModel
{
public long? Id { get; set; }
// [...]
}
AutoMapper 默认会使用相同名称的 map 属性,因此您不必一直编写它们。 在这种情况下,它会尝试使用SRSDLModel.Id
属性中的值设置asp_GetUserLoginReturnModel.Id
属性。 正如您已经注意到的那样,由于long?
和string
。
要解决此问题,请在映射中使用.Ignore()
方法来指定在映射期间不应设置此特定属性。 配置可能如下所示:
.ForMember(dest => dest.Id, i => i.Ignore());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.