小编Raj*_* Sa的帖子

使用AutoMapper更新现有域模型设置为NULL

我有下面的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和默认属性值?

笔记:

  • 我遇到了使用Automapper来更新现有的实体POCO
  • 如果我们对排除的属性使用隐藏字段,则将修复上述问题,因为viewmodel将使用隐藏字段来携带数据.但我不喜欢它!
  • 我尝试了以下不起作用的代码:

    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)

.net c# entity-framework automapper

2
推荐指数
1
解决办法
1532
查看次数

标签 统计

.net ×1

automapper ×1

c# ×1

entity-framework ×1