我想创建这样的映射:
如果source属性的Id == 0,则将destination属性设置为null
如果源属性具有Id!= 0,则使用默认配置映射此属性
例如:
Mapper.CreateMap<ItemViewModel, Item>()
.ForMember(x => x.DestinationArticle, o => o.SetNullIfSourceHasIdZero(x => x.SourceArticle));
DestinationArticle和SourceArticle属性正在实现:
public interface IEntity
{
long Id { get; set }
}
我目前的解决方案是:
.ForMember(x => x.DestinationArticle, o => o.MapFrom(x => x.SourceArticle != null && x.SourceArticle.Id != 0 ? Mapper.Map<Article>(x.SourceArticle) : null))
这不太好而且不通用。
那么,有没有什么方法可以创建,之前提到的SetNullIfSourceHasIdZero扩展方法或其他东西,这可以让我的生活更轻松?
答案 0 :(得分:0)
沿着这些方向尝试一下..
Mapper.CreateMap<ItemViewModel, Item>()
.ForMember(x => x.DestinationArticle, opt => opt.ResolveUsing<SetNullIfSourceHasIdZero>());
public class SetNullIfSourceHasIdZero : ValueResolver<ItemViewModel, DestinationArticle>
{
protected override DestinationArticle ResolveCore(ItemViewModel item)
{
// logic here
}
}