AutoMapper使用UseValue分配错误的值

时间:2015-01-09 21:00:18

标签: automapper

我有以下代码段:

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只执行一次。有什么想法吗?

enter image description here

供参考,以下是我的两个型号:

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; }
}

和数据库模型:

enter image description here

2 个答案:

答案 0 :(得分:4)

如果要在映射上使用运行时值,则需要在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假定这一点。因此,为了将运行时值传递给映射,我公开了一个字典,您可以填充任何值以在映射配置中使用。

答案 1 :(得分:0)

_companyId是一个本地私有变量吗?它看起来不像是WorkOrderServiceTypeViewModel的成员,你从哪个映射?如果是这样,为什么要使用AutoMapper而不只是直接分配? (对不起,如果我不了解_companyId的来源)