AutoMapper 使用 UseValue 分配错误的值

AutoMapper assigning the wrong value using UseValue

我有以下代码片段:

Mapper.CreateMap<WorkOrderServiceTypeViewModel, WorkOrderServiceType>()
    .ForMember(x => x.CompanyId, opt => opt.UseValue(_companyId));
Mapper.Map(model, workOrderServiceType);

当我运行这个的时候,我的手表显示_companyId是16,但是运行宁Mapper.Map之后,workOrderServiceType.CompanyId是11。

我是不是做错了什么?

ETA:看来 .UseValue 只执行一次。有什么想法吗?

作为参考,这是我的 2 个模型:

public class WorkOrderServiceTypeViewModel
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool Residential { get; set; }
    public bool Commercial { get; set; }
    public bool Restoration { get; set; }
    public bool Cleaning { get; set; }
    public bool Storage { get; set; }
}

和数据库模型:

_companyId 是局部私有变量吗?它看起来不像是您从中映射的 WorkOrderServiceTypeViewModel 的成员?如果是这样,为什么要使用 AutoMapper 而不是直接分配? (抱歉,如果我不明白 _companyId 的来源)

如果要在映射上使用运行时值,则需要使用 AutoMapper 中的运行时值支持:

Mapper.CreateMap<WorkOrderServiceTypeViewModel, WorkOrderServiceType>()
    .ForMember(x => x.CompanyId, opt => opt.ResolveUsing(res => res.Context.Options.Items["CompanyId"]));

然后在你的映射代码中:

Mapper.Map(model, workOrderServiceType, opt => opt.Items["CompanyId"] = _companyId);

您的配置应该是静态的并执行一次 - AutoMapper 假定这一点。因此,为了将运行时值传递到映射中,我公开了一个字典,您可以在其中填充任何值以在映射配置中使用。