通过Automapper进行深度克隆,忽略层次结构中的特定属性

时间:2018-11-24 07:12:30

标签: c# automapper deep-copy automapper-8

关于 Automapper 映射定义,我有一个非常简单的问题。我的意图是通过 Automapper 深度克隆对象,而忽略'Id'属性,这就是为什么我选择它来自定义映射的原因。

public interface IEntity<T>
{
    T Id { get; }
}

public abstract class Entity : IEntity<Guid>
{
    public Guid Id { get; set; }
}

我所有的实体都是从Entity类派生的,我只是想忽略对象嵌套层次结构中的所有Id属性,而不必过于明确地说明映射定义。

到目前为止,我已经拿出下面的代码来进行克隆,但是如何为嵌套属性而不是仅针对根忽略Id属性映射。

public static T AutomapperClone<T>(this T source)
    where T : IEntity<Guid>
{
    var config = new MapperConfiguration(cfg =>
    {
        cfg.CreateMap<T, T>()
            .ForMember(d => d.Id, o => o.Ignore());
    });
    // checking configuration validity
    config.AssertConfigurationIsValid();
    // creating mapper
    var mapper = config.CreateMapper();
    var copy = mapper.Map<T, T>(source);
    return copy;
}

这个想法是所有实体都获得其新ID,而不是使用相同的映射ID。它可以通过Automapper完成吗?

感谢您的反馈。

1 个答案:

答案 0 :(得分:0)

我不会为此人使用自动映射器,请尝试AnyClone来执行此操作。它会进行深度克隆,并且可以通过属性名忽略它,这似乎正是您想要的。