C# AutoMapper,即时更改映射器设置

C# AutoMapper ,Change Mapper Setting on Fly

这是我的域对象类型

[Table("CredentialingCallDetail")]
[BsonIgnoreExtraElements]
public class CredentialingCallDetail : FullAuditedEntity<ObjectId>
{ 
    public string RepresentativeName { get; set; }
    public string PhoneNumber { get; set; }
    public string PhoneExtension { get; set; }
    public string CallResultStatus { get; set; }
    public string IsFacilityCredentialed { get; set; }
    public string Provider { get; set; }
    public string PIN { get; set; }
    public List<LicensedProfessionalCredentialed> LicensedProfessionalCredentials { get; set; }
}

这是我的数据传输对象

[AutoMapTo(typeof(CredentialingCallDetail))]
public class CreateCredentialingCallDetailInput
{    
    [BsonIgnore]
    public string Id { get; set; }
    [Required]
    public string RepresentativeName { get; set; }
    [Required]
    public string PhoneNumber { get; set; }
    public string PhoneExtension { get; set; }
    [Required]
    public string CallResultStatus { get; set; }
    public string IsFacilityCredentialed { get; set; }
    public string Provider { get; set; }
    public string PIN { get; set; }
    public string Status  { get; set; }
    public List<LicensedProfessionalCredentialedDto> LicensedProfessionalCredentials { get; set; }
    public CreateCredentialingCallDetailInput()
    {
        LicensedProfessionalCredentials = new List<LicensedProfessionalCredentialedDto>();
    }
}

当我将 CreateCredentialingCallDetailInput 映射到 CredentialingCallDetail 时,即

CredentialingCallDetail newCredentialingCallDetail = input.CredentialingCallDetail.MapTo<CredentialingCallDetail>();

我得到异常

Id 的类型不匹配,Automapper 没有将字符串映射到 ObjectId,有什么方法可以即时更改设置,即更改设置以忽略 Id 映射?

答案可以在 问题中找到(是的问题!)。 您可以在两个 ways.Check 问题中执行此操作以获取详细信息。

快速为您解答。

您可以在定义映射时忽略多余的元素。

 CreateMap<CreateCredentialingCallDetailInput, CredentialingCallDetail >()
.ForSourceMember(src => src.Id, opt => opt.Ignore())

只需将第 2 行添加到现有映射中即可。

这看起来模棱两可,

CredentialingCallDetail newCredentialingCallDetail =
input.CredentialingCallDetail.MapTo<CredentialingCallDetail>();

不应该是这样吗

CredentialingCallDetail newCredentialingCallDetail =
CreateCredentialingCallDetailInput.MapTo<CredentialingCallDetail>();