繁体   English   中英

.NET Core 3 automapper 没有映射不同的名称变量? 曾在 .NET 框架中工作

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM