[英]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.