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 假定这一点。因此,为了将运行时值传递到映射中,我公开了一个字典,您可以在其中填充任何值以在映射配置中使用。
我有以下代码片段:
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 假定这一点。因此,为了将运行时值传递到映射中,我公开了一个字典,您可以在其中填充任何值以在映射配置中使用。