我有以下代码段:
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只执行一次。有什么想法吗?
供参考,以下是我的两个型号:
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; }
}
和数据库模型:
答案 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的来源)