AutoMapper:几乎总是 trim 个字符串
AutoMapper: almost always trim strings
因此,按照 this answer 的建议,我在我的基本 AutoMapper (3.3.1) 配置中设置了一个字符串到 trimmed 字符串映射,如:
configuration.CreateMap<string, string>().ConvertUsing<StringToTrimmedStringConverter>();
效果很好,除了我数据库中的两个字段完全一样,出于互操作性原因需要保留空格。在两个字符串字段之间映射时,我可以在我的数据模型到实体映射中做些什么来保留空白吗?我试过:
.ForMember(d => d.WhitespaceField,
opts => opts.ResolveUsing<WhitespaceStringResolver>
(m => m.WhitespaceModelField))
WhitespaceStringResolver 只是一个空操作:
public class WhitespaceStringResolver : ValueResolver<string, string>
{
protected override string ResolveCore(string source)
{
return source;
}
}
但这不起作用。我可以看到执行命中了解析器,但无论如何字符串都结束了 trimmed。
有没有什么方法可以忽略基本配置的映射而不是 trim 字符串,只针对我明确要忽略的几个字段?
升级AutoMapper版本不是我现在想做的事情。
最后解决的是添加
.AfterMap((model, entity) =>
{ entity.WhitespaceField = model.WhitespaceModelField; })
我也可以将 entity.WhitespaceField 标记为忽略,如果我不需要 field-to-field 映射来搜索按惯例使用 model-to-entity 映射的库。
因此,按照 this answer 的建议,我在我的基本 AutoMapper (3.3.1) 配置中设置了一个字符串到 trimmed 字符串映射,如:
configuration.CreateMap<string, string>().ConvertUsing<StringToTrimmedStringConverter>();
效果很好,除了我数据库中的两个字段完全一样,出于互操作性原因需要保留空格。在两个字符串字段之间映射时,我可以在我的数据模型到实体映射中做些什么来保留空白吗?我试过:
.ForMember(d => d.WhitespaceField,
opts => opts.ResolveUsing<WhitespaceStringResolver>
(m => m.WhitespaceModelField))
WhitespaceStringResolver 只是一个空操作:
public class WhitespaceStringResolver : ValueResolver<string, string>
{
protected override string ResolveCore(string source)
{
return source;
}
}
但这不起作用。我可以看到执行命中了解析器,但无论如何字符串都结束了 trimmed。
有没有什么方法可以忽略基本配置的映射而不是 trim 字符串,只针对我明确要忽略的几个字段?
升级AutoMapper版本不是我现在想做的事情。
最后解决的是添加
.AfterMap((model, entity) =>
{ entity.WhitespaceField = model.WhitespaceModelField; })
我也可以将 entity.WhitespaceField 标记为忽略,如果我不需要 field-to-field 映射来搜索按惯例使用 model-to-entity 映射的库。