繁体   English   中英

映射派生类型实例时忽略属性

[英]Ignore properties when mapping derived type instance

这是简单的层次结构:

abstract class Base
{
    public int Id { get; set; }
}

class Derived : Base
{
    public string Name { get; set; }
}

我需要克隆Derived实例,但是我想跳过Id值。 因此,我以这种方式配置映射器:

        Mapper
            .CreateMap<Base, Base>()
            .Include<Derived, Derived>()
            .ForMember(_ => _.Id, expression => expression.Ignore());

        var original = new Derived
        {
            Id = 1,
            Name = "John"
        };

        var clone = Mapper.Map<Derived>(original);

        Console.WriteLine(clone.Id == 0); // writes 'False'

不论ForMember调用如何, ForMember将映射Id的值。

此配置:

        Mapper
            .CreateMap<Derived, Derived>()
            .ForMember(_ => _.Id, expression => expression.Ignore());

可以正常工作,但这不是一个选择,因为它需要为每个派生类型设置ForMember

Automapper版本是2.2.1。 我究竟做错了什么?

您是否尝试过也Ignore基类映射上的Id属性?

Mapper
    .CreateMap<Base, Base>()
    .ForMember(_ => _.Id, expression => expression.Ignore())
    .Include<Derived, Derived>()
    .ForMember(_ => _.Id, expression => expression.Ignore());

[...]常规具有更高的优先级,可以忽略基类映射中的属性[...]

https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM