当我的自动映射器映射对象和它是嵌套的复杂对象时,我遇到了问题。例如,我有这个报告类,如下所示:
public class Report
{
public virtual Guid Id { get; set; }
public virtual string Title { get; set; }
public virtual Status Status { get; set; }
}
而且,我有一个与此对象类似的模型:
public class ReportModel
{
public Guid Id { get; set; }
public string Title { get; set; }
public StatusModel Status { get; set; }
}
状态类看起来像这样:
public class Status
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
}
并且StatusModel类与Status类相同。
我的映射器看起来像这样:
var cfg = new MapperConfigurationExpression();
cfg.CreateMap<Status, StatusModel>()
.ForMember(x => x.Title, o => o.MapFrom(s => TranslateValue(s.Title))).ReverseMap();
cfg.CreateMap<Report, Report>().ReverseMap();
我的问题是,在许多情况下,当我将自动映射器用于Report类时,我需要翻译Status标题,此代码可以。但是在某些特定情况下,当我为类Report使用自动映射器时,不应翻译Status对象的标题。
因此,在某些特定情况下,我需要告诉自动映射器停止自动映射嵌套对象。这样的情况有解决方案吗?
PS:AutoMapper的版本是7.0.1.0
谢谢。
如果您能够从源对象(在您的示例中为Status对象)解决特殊情况,则可以使用ForMember中的PreCondition()选项:
var cfg = new MapperConfigurationExpression();
cfg.CreateMap<Status, StatusModel>()
.ForMember(x => x.Title, o =>
{
o.PreCondition(s => s.Somefield == 42);
o.MapFrom(s => TranslateValue(s.Title))
}).ReverseMap();
cfg.CreateMap<Report, Report>().ReverseMap();