我一直在寻找各处:stackoverflow,automapper文档,互联网,只是找不到这个的任何信息,即使这似乎是一个非常普遍的问题.
我的映射:
CreateMap<StatusLevelDTO, StatusLevel>()
.ForAllMembers(opt => opt.Condition(src => src != null));
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为src表示源对象(StatusLevelDTO),而不是源属性(我认为).
更具体地说,如果我将ObjectA映射到ObjectB,ObjectA.SomeValue为null而ObjectB.SomeValue为2,我希望目标对象保持其值(2).
我已经看到了这个问题:Automapper使用自定义解析器跳过空值并尝试了前两个答案,但它们似乎都已过时版本6.
有没有办法在Automapper 6中实现这一点?我准确地使用6.0.2.
我正在尝试映射2个相同类型的对象.我想要做的是AutoMapper to toigonore所有属性,它们Null在源对象中有值,并保留目标对象中的现有值.
我已经尝试在我的"存储库"中使用它,但它似乎不起作用.
Mapper.CreateMap<TEntity, TEntity>().ForAllMembers(p => p.Condition(c => !c.IsSourceValueNull));
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
我有下面的viewmodel,它与域模型相同(但包含一些额外的属性).
public class ProductViewModel
{
public string Name { get; set; }
public string ShortDescription { get; set; }
public string FullDescription { get; set; }
public string AdminComment { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
从上面看,我只在视图页面中使用了一些属性.
当我使用Automapper映射我现有的模型时,我的所有viewmodel字段都被映射到domainmodel字段.
Mapper.Map(productViewModel, product);
Run Code Online (Sandbox Code Playgroud)
由于上面的映射,所有未使用的viewmodel字段(默认情况下未使用的viewmodel字段具有NULL值)都映射到域模型.它用NULL值替换我现有的数据库数据.
有没有办法从映射中排除NULL和默认属性值?
笔记:
我尝试了以下不起作用的代码:
Mapper.CreateMap<ProductViewModel, Product>()
.ForAllMembers(opt =>
opt.Condition(srs => (!srs.IsSourceValueNull || IsDefaultValue(srs.SourceValue, srs.SourceType))));
Run Code Online (Sandbox Code Playgroud)
编辑:
尝试Automapper后,使用自定义解析器跳过空值(感谢abatishchev).我已经使用了解析器,但得到错误缺少类型映射配置或不支持的映射
我的代码片段:
...
public System.DateTime CreatedOnUtc { get; set; } …Run Code Online (Sandbox Code Playgroud)