簡體   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